<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki-ext.aps.anl.gov/epics/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimMooney</id>
	<title>EPICSWIKI - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-ext.aps.anl.gov/epics/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=TimMooney"/>
	<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=Special:Contributions/TimMooney"/>
	<updated>2026-06-04T04:52:03Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=3766</id>
		<title>RRM 3-14 Binary Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=3766"/>
		<updated>2015-03-12T18:15:53Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Convert and Write Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= bo - Binary Output =&lt;br /&gt;
&lt;br /&gt;
The normal use for this record type is to store a simple bit  (0 or 1) value to be sent to a Digital Output module. It can also be used to write binary values into other records via database or channel access links.  This record can implement both latched and momentary binary outputs depending on how the HIGH field is configured.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The binary output's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* convert and write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The binary output record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The  binary output record must specify where its desired output originates. The desired output needs to be in engineering units.&lt;br /&gt;
&lt;br /&gt;
The first field that determines where the desired output originates is the output mode select (OMSL) field, which can have two possible values: &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;.  If &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt; is specified, the value in the VAL field can be set externally via dbPuts at run-time. If &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; is specified, the VAL field's value is obtained from the address specified in the desired output location (DOL) field which can be a database link, a channel access link, or a constant. To achieve continuous control, a database link to a control algorithm record should be entered in the DOL field.&lt;br /&gt;
&lt;br /&gt;
[[RRM 3-14 Concepts#Address Specification|Address Specification]] presents more information on database addresses and links. [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains the effect of database linkage on scanning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert and Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine where the binary output writes to and how to convert the engineering units to a raw signal. After VAL is set and forced to be either 1 or 0,  as the result of either a dbPut or a new value being retrieved from the link in the DOL field, then what happens next depends on which  device support routine is used and how the HIGH field is configured.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine is specified, then the device support routine writes the VAL field's value to the address specified in the OUT field. Otherwise, RVAL is the value finally written by the device support routines after being converted.&lt;br /&gt;
&lt;br /&gt;
If VAL is equal to 0, then the record processing routine sets RVAL equal to zero. When VAL is not equal to 0, then RVAL is set equal to the value contained in the MASK field. (MASK is set by the device support routines and is of no concern to the user.) Also when VAL is not 0 and after RVAL is set equal to MASK, the record processing routine checks to see if the HIGH field is greater than 0. If it is, then the routine will process the record again with VAL set to 0 after the number of seconds specified by HIGH. Thus, HIGH implements a momentary output which changes the state of the device back to 0 after ''N'' number of seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;Seconds to Hold High&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conversion Parameters ====&lt;br /&gt;
&lt;br /&gt;
The ZNAM field has the string that corresponds to the 0 state, and the ONAM field holds the string that corresponds to the 1 state. These fields, other than being used to tell the operator what each state represents, are used to perform conversions if the value fetched by DOL is a string. If it is, VAL is set to the state correspond to that string. For instance, if the value fetched is the string &amp;quot;Off&amp;quot; and the ZNAM string is &amp;quot;Off,&amp;quot; then VAL is set to 0.&lt;br /&gt;
&lt;br /&gt;
After VAL is set, if VAL is equal to 0, then the record processing routine sets RVAL equal to zero. When VAL is not equal to 0, then RVAL is set equal to the value contained in the MASK field. (MASK is set by the device support routines and is of no concern to the user.) Also when VAL is equal to 1 and after RVAL is set equal to MASK, the record processing routine checks to see if the HIGH field is greater than 0. If it is, then the routine process the record again with VAL=0 after the number of seconds specified by HIGH. Thus, HIGH implements a latched output which changes the state of the device or link to 1, then changes it back to 0 after N number of seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;ASCII string defining state zero&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;ASCII string defining state one&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;If this value is greater than zero, then whenever VAL is set equal to 1, it is reset to zero after HIGH seconds.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Output Specification ====&lt;br /&gt;
&lt;br /&gt;
The OUT field specifies where the binary output record writes its output. It must specify the address of an I/O card if the record sends its output to hardware, and the DTYP field must contain a the corresponding device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
Otherwise, if the record is configured to use the soft device support modules, then it can be either a database link, a channel access link, or a constant. Be aware that nothing will be written when OUT is a constant. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of database and channel access addresses. Also, see [[#Device Support For Soft Records|Device Support For Soft Records]] in this chapter for more on output to other records.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. The &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; record support routine can retrieve the state string corresponding to the VAL's state. So if the value is 1, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the string in the ONAM field; and if 0, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the ZNAM string.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine the binary output's alarm condition and to determine the severity of that condition. The possible alarm conditions for binary outputs are the SCAN, READ , INVALID, and state alarms. The user can configure the state alarm conditions using these fields.&lt;br /&gt;
&lt;br /&gt;
The possible values for these fields are &amp;lt;CODE&amp;gt;NO_ALARM&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;MINOR&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;MAJOR&amp;lt;/CODE&amp;gt;. The ZSV holds the severity for the zero state; OSV for the one state. COSV is used to cause an alarm whenever the state changes between the states (0-1, or 1-0) and its severity is configured as MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on the IVOA and IVOV fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZSV&amp;lt;TD&amp;gt;Zero Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;TD&amp;gt;One Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;COSV&amp;lt;TD&amp;gt;Change of State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Run-Time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the binary output. They are not configurable using a configuration tool. They represent the current state of the binary output.&lt;br /&gt;
&lt;br /&gt;
ORAW is used to determine if monitors should be triggered for RVAL at the same time they are triggered for VAL.&lt;br /&gt;
&lt;br /&gt;
MASK is given a value by the device support routines and should not concern the user.&lt;br /&gt;
&lt;br /&gt;
The RBV field is also set by device support. It is the actual read back value obtained from the hardware itself or from the associated device driver. The ORBV field is used to decide if monitors should be triggered for RBV at the same time monitors are triggered for changes in VAL. &lt;br /&gt;
&lt;br /&gt;
The LALM field holds the value of the last occurrence of the change of state alarm. It is used to implement the change of state alarm, and thus only has meaning if COSV is MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
The MLST is used by the &amp;lt;CODE&amp;gt;process&amp;lt;/CODE&amp;gt; record support routine to determine if archive and value change monitors are invoked. They are if MLST is not equal to VAL.&lt;br /&gt;
&lt;br /&gt;
The WPDT field is a private field for honoring seconds to hold HIGH.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware Mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;compute&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Readback Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORBV&amp;lt;TD&amp;gt;Old Readback Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Monitored Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPVT&amp;lt;TD&amp;gt;Record Private&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDPT&amp;lt;TD&amp;gt;Watchdog Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the binary output in the simulation mode.  See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuSimm|menuSimm]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created .&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. The routine next checks to see if the device support write routine is defined.&lt;br /&gt;
&lt;br /&gt;
If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized to 1 if its value is nonzero or initialized to 0 if DOL is zero, and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called. VAL is set using RVAL, and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII string corresponding to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_strs ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII strings for ZNAM and ONAM.&lt;br /&gt;
&lt;br /&gt;
==== put_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Checks if string matches ZNAM or ONAM, and if it does, sets VAL.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE&lt;br /&gt;
#* if DOL is DB_LINK and OMSL is CLOSED_LOOP&lt;br /&gt;
#** get value from DOL&lt;br /&gt;
#** check for link alarm&lt;br /&gt;
#** force VAL to be 0 or 1&lt;br /&gt;
#** if MASK is defined&lt;br /&gt;
#*** if VAL is 0 set RVAL = 0&lt;br /&gt;
#** else set RVAL = MASK&lt;br /&gt;
# Check alarms: This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on how INVALID alarms affect output.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check WAIT. If VAL is 1 and WAIT is greater than 0, process again with a VAL=0 after WAIT seconds.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL and for RBV are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each binary output record must have an associated set of device support routines. The primary responsibility of the device support routines is to write a new value whenever write_bo is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;This field is only of interest to device support routines that do not use MASK and RVAL.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;If MASK is defined then record support sets RVAL=(0,MASK) if VAL is (0, not zero).&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware mask.&amp;lt;TD&amp;gt;The device support module must set this field. Not that if VAL is 1, then record processing sets RVAL = MASK.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value&amp;lt;TD&amp;gt;This is the actual read back value obtained from the hardware itself or from the associated device driver.  It is the responsibility of the device support routine to give this field a value.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. It should determine MASK if it is needed.&lt;br /&gt;
&lt;br /&gt;
* 0: Success. RVAL modified (VAL will be set accordingly)&lt;br /&gt;
* 2: Success. VAL modified&lt;br /&gt;
* other: Error.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_bo ====&lt;br /&gt;
&lt;br /&gt;
 write_bo(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output an new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; are provided for output records not related to actual hardware devices. The OUT link type must be either a CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record. init_record always returns a value of 2, which means that no conversion will ever be attempted. write_bo calls recGblPutLinkValue to write the current value of VAL. See [[RRM 3-14 Common#Soft Output|Soft Output]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that it writes the current value of RVAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=3765</id>
		<title>RRM 3-14 Binary Output</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Binary_Output&amp;diff=3765"/>
		<updated>2015-03-12T18:15:14Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Desired Output Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= bo - Binary Output =&lt;br /&gt;
&lt;br /&gt;
The normal use for this record type is to store a simple bit  (0 or 1) value to be sent to a Digital Output module. It can also be used to write binary values into other records via database or channel access links.  This record can implement both latched and momentary binary outputs depending on how the HIGH field is configured.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The binary output's fields fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* convert and write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* run-time parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The binary output record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-14 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Note that I/O event scanning is only supported for those card types that interrupt. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The  binary output record must specify where its desired output originates. The desired output needs to be in engineering units.&lt;br /&gt;
&lt;br /&gt;
The first field that determines where the desired output originates is the output mode select (OMSL) field, which can have two possible values: &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;.  If &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt; is specified, the value in the VAL field can be set externally via dbPuts at run-time. If &amp;lt;CODE&amp;gt;closed_loop&amp;lt;/CODE&amp;gt; is specified, the VAL field's value is obtained from the address specified in the desired output location (DOL) field which can be a database link, a channel access link, or a constant. To achieve continuous control, a database link to a control algorithm record should be entered in the DOL field.&lt;br /&gt;
&lt;br /&gt;
[[RRM 3-14 Concepts#Address Specification|Address Specification]] presents more information on database addresses and links. [[RRM 3-14 Concepts#Scanning Specification|Scanning Specification]] explains the effect of database linkage on scanning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuOmsl|menuOmsl]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Convert and Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine where the binary output writes to and how to convert the engineering units to a raw signal. After VAL is set and forced to be either 1 or 0,  as the result of either a dbPut or a new value being retrieved from the link in the DOL field, then what happens next depends on which  device support routine is used and how the HIGH field is configured.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; device support routine is specified, then the device support routine writes the VAL field's value to the address specified in the OUT field. Otherwise, RVAL is the value finally written by the device support routines after being converted.&lt;br /&gt;
&lt;br /&gt;
If VAL is equal to 0, then the record processing routine sets RVAL equal to zero. When VAL is not equal to 0, then RVAL is set equal to the value contained in the MASK field. (MASK is set by the device support routines and is of no concern to the user.) Also when VAL is not 0 and after RVAL is set equal to MASK, the record processing routine checks to see if the HIGH field is greater than 0. If it is, then the routine will process the record again with VAL set to 0 after the number of seconds specified by HIGH. Thus, HIGH implements a momentary output which changes the state of the device back to 0 after ''N'' number of seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DTYP&amp;lt;TD&amp;gt;Device Type&amp;lt;TD&amp;gt;DEVCHOICE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;ENUM&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;Seconds to Hold High&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conversion Parameters ====&lt;br /&gt;
&lt;br /&gt;
The ZNAM field has the string that corresponds to the 0 state, and the ONAM field holds the string that corresponds to the 1 state. These fields, other than being used to tell the operator what each state represents, are used to perform conversions if the value fetched by DOL is a string. If it is, VAL is set to the state correspond to that string. For instance, if the value fetched is the string &amp;quot;Off&amp;quot; and the ZNAM string is &amp;quot;Off,&amp;quot; then VAL is set to 0.&lt;br /&gt;
&lt;br /&gt;
After VAL is set, if VAL is equal to 0, then the record processing routine sets RVAL equal to zero. When VAL is not equal to 0, then RVAL is set equal to the value contained in the MASK field. (MASK is set by the device support routines and is of no concern to the user.) Also when VAL is equal to 1 and after RVAL is set equal to MASK, the record processing routine checks to see if the HIGH field is greater than 0. If it is, then the routine process the record again with VAL=0 after the number of seconds specified by HIGH. Thus, HIGH implements a latched output which changes the state of the device or link to 1, then changes it back to 0 after N number of seconds.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;ASCII string defining state zero&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;ASCII string defining state one&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;If this value is greater than zero, then whenever VAL is set equal to 1, it is reset to zero after HIGH seconds.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Output Specification ====&lt;br /&gt;
&lt;br /&gt;
The OUT field specifies where the binary output record writes its output. It must specify the address of an I/O card if the record sends its output to hardware, and the DTYP field must contain a the corresponding device support module. Be aware that the address format differs according to the I/O bus used. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of hardware addresses. You can see a list of the device support modules currently supported at the user's local site by using the &amp;lt;CODE&amp;gt;dbst&amp;lt;/CODE&amp;gt; utility in R3.13.&lt;br /&gt;
&lt;br /&gt;
Otherwise, if the record is configured to use the soft device support modules, then it can be either a database link, a channel access link, or a constant. Be aware that nothing will be written when OUT is a constant. See [[RRM 3-14 Concepts#Address Specification|Address Specification]] for information on the format of database and channel access addresses. Also, see [[#Device Support For Soft Records|Device Support For Soft Records]] in this chapter for more on output to other records.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. The &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; record support routine can retrieve the state string corresponding to the VAL's state. So if the value is 1, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the string in the ONAM field; and if 0, &amp;lt;CODE&amp;gt;get_enum_str&amp;lt;/CODE&amp;gt; will return the ZNAM string.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZNAM&amp;lt;TD&amp;gt;Zero Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ONAM&amp;lt;TD&amp;gt;One Name&amp;lt;TD&amp;gt;STRING [20]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine the binary output's alarm condition and to determine the severity of that condition. The possible alarm conditions for binary outputs are the SCAN, READ , INVALID, and state alarms. The user can configure the state alarm conditions using these fields.&lt;br /&gt;
&lt;br /&gt;
The possible values for these fields are &amp;lt;CODE&amp;gt;NO_ALARM&amp;lt;/CODE&amp;gt;, &amp;lt;CODE&amp;gt;MINOR&amp;lt;/CODE&amp;gt;, and &amp;lt;CODE&amp;gt;MAJOR&amp;lt;/CODE&amp;gt;. The ZSV holds the severity for the zero state; OSV for the one state. COSV is used to cause an alarm whenever the state changes between the states (0-1, or 1-0) and its severity is configured as MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on the IVOA and IVOV fields. [[RRM 3-14 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ZSV&amp;lt;TD&amp;gt;Zero Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;TD&amp;gt;One Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;COSV&amp;lt;TD&amp;gt;Change of State Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;TD&amp;gt;Invalid Alarm Output Action&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuIvoa|menuIvoa]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;TD&amp;gt;Invalid Alarm Output Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Run-Time and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the binary output. They are not configurable using a configuration tool. They represent the current state of the binary output.&lt;br /&gt;
&lt;br /&gt;
ORAW is used to determine if monitors should be triggered for RVAL at the same time they are triggered for VAL.&lt;br /&gt;
&lt;br /&gt;
MASK is given a value by the device support routines and should not concern the user.&lt;br /&gt;
&lt;br /&gt;
The RBV field is also set by device support. It is the actual read back value obtained from the hardware itself or from the associated device driver. The ORBV field is used to decide if monitors should be triggered for RBV at the same time monitors are triggered for changes in VAL. &lt;br /&gt;
&lt;br /&gt;
The LALM field holds the value of the last occurrence of the change of state alarm. It is used to implement the change of state alarm, and thus only has meaning if COSV is MINOR or MAJOR.&lt;br /&gt;
&lt;br /&gt;
The MLST is used by the &amp;lt;CODE&amp;gt;process&amp;lt;/CODE&amp;gt; record support routine to determine if archive and value change monitors are invoked. They are if MLST is not equal to VAL.&lt;br /&gt;
&lt;br /&gt;
The WPDT field is a private field for honoring seconds to hold HIGH.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORAW&amp;lt;TD&amp;gt;Old Raw Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware Mask&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;compute&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Readback Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ORBV&amp;lt;TD&amp;gt;Old Readback Value&amp;lt;TD&amp;gt;ULONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Monitored Value&amp;lt;TD&amp;gt;USHORT&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RPVT&amp;lt;TD&amp;gt;Record Private&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WDPT&amp;lt;TD&amp;gt;Watchdog Pointer&amp;lt;TD&amp;gt;NOACCESS&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following fields are used to operate the binary output in the simulation mode.  See [[RRM 3-14 Common#Fields Common to Many Record Types|Fields Common to Many Record Types]] for more information on these fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIOL&amp;lt;TD&amp;gt;Simulation Value Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIML&amp;lt;TD&amp;gt;Simulation Mode Location&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMM&amp;lt;TD&amp;gt;Simulation Mode&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuSimm|menuSimm]]&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SIMS&amp;lt;TD&amp;gt;Simulation Mode Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-14 Menu Choices#menuAlarmSevr|menuAlarmSevr]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes SIMM if SIML is a constant or creates a channel access link if SIML is PV_LINK. If SIOL is PV_LINK a channel access link is created .&lt;br /&gt;
&lt;br /&gt;
This routine next checks to see that device support is available. The routine next checks to see if the device support write routine is defined.&lt;br /&gt;
&lt;br /&gt;
If either device support or the device support write routine does not exist, an error message is issued and processing is terminated.&lt;br /&gt;
&lt;br /&gt;
If DOL is a constant, then VAL is initialized to 1 if its value is nonzero or initialized to 0 if DOL is zero, and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
If device support includes init_record, it is called. VAL is set using RVAL, and UDF is set to FALSE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII string corresponding to VAL.&lt;br /&gt;
&lt;br /&gt;
==== get_enum_strs ====&lt;br /&gt;
&lt;br /&gt;
Retrieves ASCII strings for ZNAM and ONAM.&lt;br /&gt;
&lt;br /&gt;
==== put_enum_str ====&lt;br /&gt;
&lt;br /&gt;
Checks if string matches ZNAM or ONAM, and if it does, sets VAL.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
Routine process implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
# Check to see that the appropriate device support module exists. If it doesn't, an error message is issued and processing is terminated with the PACT field still set to TRUE. This ensures that processes will no longer be called for this record. Thus error storms will not occur.&lt;br /&gt;
# If PACT is FALSE&lt;br /&gt;
#* if DOL is DB_LINK and OMSL is CLOSED_LOOP&lt;br /&gt;
#** get value from DOL&lt;br /&gt;
#** check for link alarm&lt;br /&gt;
#** force VAL to be 0 or 1&lt;br /&gt;
#** if MASK is defined&lt;br /&gt;
#*** if VAL is 0 set RVAL = 0&lt;br /&gt;
#** else set RVAL = MASK&lt;br /&gt;
# Check alarms: This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set.&lt;br /&gt;
# Check severity and write the new value. See [[RRM 3-14 Common#Invalid Alarm Output Action|Invalid Alarm Output Action]] for more information on how INVALID alarms affect output.&lt;br /&gt;
# If PACT has been changed to TRUE, the device support write output routine has started but has not completed writing the new value. In this case, the processing routine merely returns, leaving PACT TRUE.&lt;br /&gt;
# Check WAIT. If VAL is 1 and WAIT is greater than 0, process again with a VAL=0 after WAIT seconds.&lt;br /&gt;
# Check to see if monitors should be invoked.&lt;br /&gt;
#* Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
#* Archive and value change monitors are invoked if MLST is not equal to VAL.&lt;br /&gt;
#* Monitors for RVAL and for RBV are checked whenever other monitors are invoked.&lt;br /&gt;
#* NSEV and NSTA are reset to 0.&lt;br /&gt;
# Scan forward link if necessary, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Support ==&lt;br /&gt;
&lt;br /&gt;
=== Fields Of Interest To Device Support ===&lt;br /&gt;
&lt;br /&gt;
Each binary output record must have an associated set of device support routines. The primary responsibility of the device support routines is to write a new value whenever write_bo is called. The device support routines are primarily interested in the following fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Name&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Description&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PACT&amp;lt;TD&amp;gt;Processing Active&amp;lt;TD rowspan=4&amp;gt;See [[RRM 3-14 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for an explanation of these fields.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DPVT&amp;lt;TD&amp;gt;Device Private&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSEV&amp;lt;TD&amp;gt;New Alarm Severity&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NSTA&amp;lt;TD&amp;gt;New Alarm Status&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL&amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;This field is only of interest to device support routines that do not use MASK and RVAL.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;TD&amp;gt;Output Link&amp;lt;TD&amp;gt;This field is used by the device support routines to locate its output.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RVAL&amp;lt;TD&amp;gt;Raw Data Value&amp;lt;TD&amp;gt;If MASK is defined then record support sets RVAL=(0,MASK) if VAL is (0, not zero).&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MASK&amp;lt;TD&amp;gt;Hardware mask.&amp;lt;TD&amp;gt;The device support module must set this field. Not that if VAL is 1, then record processing sets RVAL = MASK.&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;RBV&amp;lt;TD&amp;gt;Read Back Value&amp;lt;TD&amp;gt;This is the actual read back value obtained from the hardware itself or from the associated device driver.  It is the responsibility of the device support routine to give this field a value.&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Device Support routines ===&lt;br /&gt;
&lt;br /&gt;
Device support consists of the following routines:&lt;br /&gt;
&lt;br /&gt;
==== report ====&lt;br /&gt;
&lt;br /&gt;
 report(FILE fp, paddr)&lt;br /&gt;
&lt;br /&gt;
Not currently used.&lt;br /&gt;
&lt;br /&gt;
==== init ====&lt;br /&gt;
&lt;br /&gt;
 init()&lt;br /&gt;
&lt;br /&gt;
This routine is called once during IOC initialization.&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
 init_record(precord)&lt;br /&gt;
&lt;br /&gt;
This routine is optional. If provided, it is called by the record support init_record routine. It should determine MASK if it is needed.&lt;br /&gt;
&lt;br /&gt;
* 0: Success. RVAL modified (VAL will be set accordingly)&lt;br /&gt;
* 2: Success. VAL modified&lt;br /&gt;
* other: Error.&lt;br /&gt;
&lt;br /&gt;
==== get_ioint_info ====&lt;br /&gt;
&lt;br /&gt;
 get_ioint_info(int cmd,struct dbCommon *precord,IOSCANPVT *ppvt)&lt;br /&gt;
&lt;br /&gt;
This routine is called by the ioEventScan system each time the record is added or deleted from an I/O event scan list. cmd has the value (0,1) if the record is being (added to, deleted from) an I/O event list. It must be provided for any device type that can use the ioEvent scanner.&lt;br /&gt;
&lt;br /&gt;
==== write_bo ====&lt;br /&gt;
&lt;br /&gt;
 write_bo(precord)&lt;br /&gt;
&lt;br /&gt;
This routine must output an new value. It returns the following values:&lt;br /&gt;
&lt;br /&gt;
* 0: Success.&lt;br /&gt;
* other: Error.&lt;br /&gt;
&lt;br /&gt;
=== Device Support For Soft Records ===&lt;br /&gt;
&lt;br /&gt;
Two soft device support modules &amp;lt;CODE&amp;gt;Soft Channel&amp;lt;/CODE&amp;gt; and &amp;lt;CODE&amp;gt;Raw Soft Channel&amp;lt;/CODE&amp;gt; are provided for output records not related to actual hardware devices. The OUT link type must be either a CONSTANT, DB_LINK, or CA_LINK.&lt;br /&gt;
&lt;br /&gt;
==== Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module writes the current value of VAL.&lt;br /&gt;
&lt;br /&gt;
If the OUT link type is PV_LINK, then dbCaAddInlink is called by init_record. init_record always returns a value of 2, which means that no conversion will ever be attempted. write_bo calls recGblPutLinkValue to write the current value of VAL. See [[RRM 3-14 Common#Soft Output|Soft Output]] for details.&lt;br /&gt;
&lt;br /&gt;
==== Raw Soft Channel ====&lt;br /&gt;
&lt;br /&gt;
This module is like the previous except that it writes the current value of RVAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=3758</id>
		<title>RRM 3-14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=3758"/>
		<updated>2014-12-03T20:52:11Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Record Types Not in Base */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation has been revised since the older 3-13 version, but the software has been updated significantly since the docs were written so there may still be a number of inaccuracies here.  The [[RRM 3-14 Editing Tasks|Editing Tasks]] page gives some ideas on what else might need doing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3-14 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson and Kazimierz Gofron&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-14 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-14 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-14 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Array Analog Input|aai - Array Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Array Analog Output|aao - Array Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Array Subroutine|aSub - Array Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-14 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-14 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-14 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-14 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-14 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-14 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-14 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-14 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-14 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-14 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-14 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-14 State|state - State]]&lt;br /&gt;
* [[RRM 3-14 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-14 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-14 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-14 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Record Types Not in Base ===&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Archive|archive - Archive]]&lt;br /&gt;
* [http://www.aps.anl.gov/epics/modules/soft/asyn/R4-24/asynRecord.html asyn]&lt;br /&gt;
* [[RRM 3-14 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-14 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-14 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-14 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-14 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-14 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-14 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-14 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-14 Wait|wait - Wait]]&lt;br /&gt;
* synApps records&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/alive/aliveRecord.html alive]&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/calc/aCalcoutRecord.html acalcout] Array Calculation Output&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/sscan/busyRecord.html busy] Signal put_callback() completion&lt;br /&gt;
** [http://cars9.uchicago.edu/software/epics/camacRecord.html camac] Generic CAMAC Record&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/vac/README.txt digitel] Vacuum controller&lt;br /&gt;
** [http://cars9.uchicago.edu/software/epics/dxpRecord.html dxp]&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/std/epidRecord.html epid] Enhanced PID&lt;br /&gt;
**[http://cars9.uchicago.edu/software/epics/mcaRecord.html mca] Multichannel analyzer, multichannel scaler&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/motor/R6-8/motorRecord.html motor] Stepper and servo motor&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/calc/sCalcoutRecord.html scalcout] String Calculation Output&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/std/scalerRecord.html scaler] Multibank counter&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/sscan/sscanRecord.html sscan] Set conditions, trigger detectors, record data, write data files&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/sscan/scanparmRecord.html scanparm] One-button scan&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/std/sseqRecord.html sseq] String sequence&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/calc/swaitRecord.html swait] Calcout variant&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/optics/tableRecord.html table] Optical table&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/calc/transformRecord.html transform] Calc variant&lt;br /&gt;
** [http://cars9.uchicago.edu/software/epics/vmeRecord.html vme] Generic VME access&lt;br /&gt;
** [http://www.aps.anl.gov/bcda/synApps/vac/README.txt vs] Vacuum sensor&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=3715</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=3715"/>
		<updated>2013-03-12T22:54:45Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: EFLG actually defaults to &amp;quot;ON CHANGE&amp;quot;, not to &amp;quot;ALWAYS&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-14|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array or scalar &lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing, which is a status value that controls whether the output links are used or not.&lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ON CHANGE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined process routine, which must be zero for the output links OUTA...OUTU to be processed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If the value is READ, then the name of the subroutine to be called at process time is read from SUBL. If the value is IGNORE, the name of the subroutine is that currently held in SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post change events on the output fields VALA,...,VALU. If the value is NEVER, events are never posted. If the value is ALWAYS, events are posted everytime the record processes. If the value is ON CHANGE, events are posted when any element of an array changes value. This flag controls value, log (archive) and alarm change events.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be any of the following:&lt;br /&gt;
&amp;quot;STRING&amp;quot;,&amp;quot;CHAR&amp;quot;,&amp;quot;UCHAR&amp;quot;,&amp;quot;SHORT&amp;quot;,&amp;quot;USHORT&amp;quot;,&amp;quot;LONG&amp;quot;,&amp;quot;ULONG&amp;quot;,&amp;quot;FLOAT&amp;quot;,&amp;quot;DOUBLE, &amp;quot;ENUM&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Max elements in A,.. Max elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements of storage allocated for each input field. Default is 1 (scalar value). An array is specified by setting this field to greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA..., NEU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The current number of elements stored in each input field. Field contains an array if this field is greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Max elements in VALA,.. Max elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements of storage allocated for each output field. Default is 1 (scalar value). An array is specified by setting this field to greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Number of elements in VALA,.. Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The current number of elements stored in each output field. Field contains an array if this field is greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* field values. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* If VAL is zero, write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM (again).&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* If VAL is zero, write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU), which are completely independent.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1'). The output links OUTA-OUTU will only be processed if the subroutine returns a zero (OK) status value.&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return 0; /* process output links */&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine code must always handle the value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
&lt;br /&gt;
Aside from your own code, you must export and register your subroutines so the record can locate them.  The simplest way is as follows:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
    epicsRegisterFunction(my_asub_routine);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded by the ioc must then contain the following line, which tells the linker to include your object file in the IOC binary:&lt;br /&gt;
&lt;br /&gt;
    function(my_asub_routine)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
The aSub record does not call any device support routines.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
=== Dynamically Changing the User Routine called during Record Processing ===&lt;br /&gt;
&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol table for the symbol name whenever the name of routine fetched from the link changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM field can be changed by a Channel Access write to that field. During development when trying several versions of the routine, it is not necessary to reboot the IOC and reload the database. A new routine can be loaded with the vxWorks ld command, and Channel Access or the dbpf command used to put the name of the routine into the record's SNAM field. The record will look up the symbol name in the symbol table whenever the SNAM field gets modified. The same routine name can even be used as the vxWorks symbol lookup returns the latest version of the code to have been loaded.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1917</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1917"/>
		<updated>2010-12-03T18:15:06Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Field Descriptions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If the value is READ, then the name of the subroutine to be called at process time is read from SUBL. If the value is IGNORE, the name of the subroutine is that currently held in SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post change events on the output fields VALA,...,VALU. If the value is NEVER, events are never posted. If the value is ALWAYS, events are posted everytime the record processes. If the value is ON CHANGE, events are posted when any element of an array changes value. This flag controls value, log (archive) and alarm change events.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be any of the following:&lt;br /&gt;
&amp;quot;STRING&amp;quot;,&amp;quot;CHAR&amp;quot;,&amp;quot;UCHAR&amp;quot;,&amp;quot;SHORT&amp;quot;,&amp;quot;USHORT&amp;quot;,&amp;quot;LONG&amp;quot;,&amp;quot;ULONG&amp;quot;,&amp;quot;FLOAT&amp;quot;,&amp;quot;DOUBLE, &amp;quot;ENUM&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Max elements in A,.. Max elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements of storage allocated for each input field. Default is 1 (scalar value). An array is specified by setting this field to greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA..., NEU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The current number of elements stored in each input field. Field contains an array if this field is greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Max elements in VALA,.. Max elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements of storage allocated for each output field. Default is 1 (scalar value). An array is specified by setting this field to greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Number of elements in VALA,.. Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The current number of elements stored in each output field. Field contains an array if this field is greater than 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* field values. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU).  There is no association between A and VALA, etc.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1').&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return(0)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine must always treat value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
Aside from your own code, you must include something like the following along with your subroutine code.  This tells EPICS how to handle references to your subroutine:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    static registryFunctionRef my_asub_Ref[] = {&lt;br /&gt;
        {&amp;quot;my_asub_routine&amp;quot;, (REGISTRYFUNCTION) my_asub_routine}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    static void my_asub_Registrar(void) {&lt;br /&gt;
        registryFunctionRefAdd(my_asub_Ref, NELEMENTS(my_asub_Ref));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    epicsExportRegistrar(my_asub_Registrar);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded into the ioc must contain something like the following, so EPICS can find the subroutine:&lt;br /&gt;
&lt;br /&gt;
    registrar(my_asub_Registrar)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
Note, by the way, that the aSub record does not talk to device support.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
=== Dynamically Changing the User Routine called during Record Processing ===&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=1916</id>
		<title>RRM 3-14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=1916"/>
		<updated>2009-09-12T06:13:13Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* EPICS 3-14 Record Reference Manual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation is a revision of 3-13 documentation, as the software has been updated significantly since the docs were written.  The [[RRM 3-14 Editing Tasks|Editing Tasks]] page gives some ideas on what needs doing to bring it up to the R3.14.9 implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3-14 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson and Kazimierz Gofron&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-14 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-14 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-14 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Array Subroutine|aSub - Array Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-14 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-14 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-14 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-14 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-14 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-14 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-14 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-14 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-14 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-14 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-14 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-14 State|state - State]]&lt;br /&gt;
* [[RRM 3-14 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-14 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-14 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-14 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Other Record Types Not in Base ===&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Archive|archive - Archive]]&lt;br /&gt;
* [[RRM 3-14 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-14 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-14 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-14 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-14 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-14 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-14 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-14 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-14 Wait|wait - Wait]]&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1835</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1835"/>
		<updated>2009-09-10T21:47:31Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Device support, writing to hardware */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* fields. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU).  There is no association between A and VALA, etc.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1').&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return(0)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine must always treat value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
Aside from your own code, you must include something like the following along with your subroutine code.  This tells EPICS how to handle references to your subroutine:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    static registryFunctionRef my_asub_Ref[] = {&lt;br /&gt;
        {&amp;quot;my_asub_routine&amp;quot;, (REGISTRYFUNCTION) my_asub_routine}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    static void my_asub_Registrar(void) {&lt;br /&gt;
        registryFunctionRefAdd(my_asub_Ref, NELEMENTS(my_asub_Ref));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    epicsExportRegistrar(my_asub_Registrar);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded into the ioc must contain something like the following, so EPICS can find the subroutine:&lt;br /&gt;
&lt;br /&gt;
    registrar(my_asub_Registrar)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
Note, by the way, that the aSub record does not talk to device support.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
=== Dynamically Changing the User Routine called during Record Processing ===&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1762</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1762"/>
		<updated>2009-09-10T21:40:59Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Field Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt;&amp;lt;td&amp;gt; &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* fields. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU).  There is no association between A and VALA, etc.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1').&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return(0)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine must always treat value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
Aside from your own code, you must include something like the following along with your subroutine code.  This tells EPICS how to handle references to your subroutine:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    static registryFunctionRef my_asub_Ref[] = {&lt;br /&gt;
        {&amp;quot;my_asub_routine&amp;quot;, (REGISTRYFUNCTION) my_asub_routine}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    static void my_asub_Registrar(void) {&lt;br /&gt;
        registryFunctionRefAdd(my_asub_Ref, NELEMENTS(my_asub_Ref));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    epicsExportRegistrar(my_asub_Registrar);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded into the ioc must contain something like the following, so EPICS can find the subroutine:&lt;br /&gt;
&lt;br /&gt;
    registrar(my_asub_Registrar)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
Note, by the way, that he aSub record does not talk to device support.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
=== Dynamically Changing the User Routine called during Record Processing ===&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1761</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1761"/>
		<updated>2009-09-10T21:36:55Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Dynamically Changing the User Routine called during Record Processing */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* fields. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU).  There is no association between A and VALA, etc.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1').&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return(0)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine must always treat value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
Aside from your own code, you must include something like the following along with your subroutine code.  This tells EPICS how to handle references to your subroutine:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    static registryFunctionRef my_asub_Ref[] = {&lt;br /&gt;
        {&amp;quot;my_asub_routine&amp;quot;, (REGISTRYFUNCTION) my_asub_routine}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    static void my_asub_Registrar(void) {&lt;br /&gt;
        registryFunctionRefAdd(my_asub_Ref, NELEMENTS(my_asub_Ref));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    epicsExportRegistrar(my_asub_Registrar);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded into the ioc must contain something like the following, so EPICS can find the subroutine:&lt;br /&gt;
&lt;br /&gt;
    registrar(my_asub_Registrar)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
Note, by the way, that he aSub record does not talk to device support.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
=== Dynamically Changing the User Routine called during Record Processing ===&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1760</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1760"/>
		<updated>2009-09-10T21:36:18Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Required database-definition code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* fields. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU).  There is no association between A and VALA, etc.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1').&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return(0)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine must always treat value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
Aside from your own code, you must include something like the following along with your subroutine code.  This tells EPICS how to handle references to your subroutine:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    static registryFunctionRef my_asub_Ref[] = {&lt;br /&gt;
        {&amp;quot;my_asub_routine&amp;quot;, (REGISTRYFUNCTION) my_asub_routine}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    static void my_asub_Registrar(void) {&lt;br /&gt;
        registryFunctionRefAdd(my_asub_Ref, NELEMENTS(my_asub_Ref));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    epicsExportRegistrar(my_asub_Registrar);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded into the ioc must contain something like the following, so EPICS can find the subroutine:&lt;br /&gt;
&lt;br /&gt;
    registrar(my_asub_Registrar)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
Note, by the way, that he aSub record does not talk to device support.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1759</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1759"/>
		<updated>2009-09-10T21:35:48Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Required export code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* fields. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU).  There is no association between A and VALA, etc.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1').&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return(0)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine must always treat value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
Aside from your own code, you must include something like the following along with your subroutine code.  This tells EPICS how to handle references to your subroutine:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    static registryFunctionRef my_asub_Ref[] = {&lt;br /&gt;
        {&amp;quot;my_asub_routine&amp;quot;, (REGISTRYFUNCTION) my_asub_routine}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    static void my_asub_Registrar(void) {&lt;br /&gt;
        registryFunctionRefAdd(my_asub_Ref, NELEMENTS(my_asub_Ref));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    epicsExportRegistrar(my_asub_Registrar);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded into the ioc must contain the following, so EPICS can find the subroutine:&lt;br /&gt;
&lt;br /&gt;
    registrar(my_asub_Registrar)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
Note, by the way, that he aSub record does not talk to device support.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1758</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1758"/>
		<updated>2009-09-10T21:34:04Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* fields. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
The aSub record has input-value fields (A-U) and output-value fields (VALA-VALU).  There is no association between A and VALA, etc.  The input-value fields have associated input links (INPA-INPU), and the output-value fields have associated output links (OUTA-OUTU).  Both inputs and outputs have type fields (FTA-FTU, FTVA-FTVU, which default to 'DOUBLE') and number-of-element fields (NOA-NOU, NOVA-NOVU, which default to '1').&lt;br /&gt;
&lt;br /&gt;
=== Example database fragment ===&lt;br /&gt;
To use the A field to read an array from some other record, then, you would need a database fragment that might look something like this:&lt;br /&gt;
&lt;br /&gt;
    record(aSub,&amp;quot;my_asub_record&amp;quot;) {&lt;br /&gt;
        field(SNAM,&amp;quot;my_asub_routine&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
        field(FTA, &amp;quot;LONG&amp;quot;)&lt;br /&gt;
        field(NOA, &amp;quot;100&amp;quot;)&lt;br /&gt;
        field(INPA, &amp;quot;myWaveform_1 NPP NMS&amp;quot;)&lt;br /&gt;
        ...&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
If you wanted some other record to be able to write to the A field, then you would delete the input link above.  If you wanted the A field to hold a scalar value, you would either delete the NOA specification, or specify it as &amp;quot;1&amp;quot;.&lt;br /&gt;
 &lt;br /&gt;
=== Example subroutine fragment ===&lt;br /&gt;
&lt;br /&gt;
The associated subroutine code that uses the A field might look like this:&lt;br /&gt;
&lt;br /&gt;
    static long my_asub_routine(aSubRecord *prec) {&lt;br /&gt;
        long i, *a;&lt;br /&gt;
        double sum=0;&lt;br /&gt;
        ...&lt;br /&gt;
        a = (long *)prec-&amp;gt;a;&lt;br /&gt;
        for (i=0; i&amp;lt;prec-&amp;gt;noa; i++) {&lt;br /&gt;
            sum += a[i];&lt;br /&gt;
        }&lt;br /&gt;
        ...&lt;br /&gt;
        return(0)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
Note that the subroutine must always treat value fields (A-U, VALA-VALU) as arrays, even if they contain only a single element.&lt;br /&gt;
&lt;br /&gt;
=== Required export code ===&lt;br /&gt;
Aside from your own code, you must include something like the following in the file that contains your subroutine code.  This tells EPICS how to handle references to your subroutine:&lt;br /&gt;
&lt;br /&gt;
    #include &amp;lt;registryFunction.h&amp;gt;&lt;br /&gt;
    #include &amp;lt;epicsExport.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    static registryFunctionRef my_asub_Ref[] = {&lt;br /&gt;
        {&amp;quot;my_asub_routine&amp;quot;, (REGISTRYFUNCTION) my_asub_routine}&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
    static void my_asub_Registrar(void) {&lt;br /&gt;
        registryFunctionRefAdd(my_asub_Ref, NELEMENTS(my_asub_Ref));&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    epicsExportRegistrar(my_asub_Registrar);&lt;br /&gt;
&lt;br /&gt;
=== Required database-definition code ===&lt;br /&gt;
&lt;br /&gt;
The .dbd file loaded into the ioc must contain the following, so EPICS can find the subroutine:&lt;br /&gt;
&lt;br /&gt;
    registrar(my_asub_Registrar)&lt;br /&gt;
&lt;br /&gt;
=== Device support, writing to hardware ===&lt;br /&gt;
&lt;br /&gt;
Note, by the way, that he aSub record does not talk to device support.  If you want to write to hardware, you might use your output fields and links to write to some other record that can write to hardware.&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1757</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1757"/>
		<updated>2009-09-10T20:19:26Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* init_record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU.  Initialize fields NE* to the values of the associated NO* fields. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU.  For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
* If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of the process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1756</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1756"/>
		<updated>2009-09-10T20:13:57Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Field Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;MENU(IGNORE, READ)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;IGNORE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;MENU(NEVER, ON CHANGE, ALWAYS)&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;ALWAYS&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;MENU&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1755</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1755"/>
		<updated>2009-09-10T20:09:29Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Field Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec Proc Monitor&amp;lt;th&amp;gt;PP&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1754</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1754"/>
		<updated>2009-09-10T19:46:12Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Field Descriptions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec&amp;lt;th&amp;gt;Proc&amp;lt;th&amp;gt;Monitor&amp;lt;th&amp;gt;PP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;Num. elements in field&amp;lt;td&amp;gt;Num. elements in field&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1753</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1753"/>
		<updated>2009-09-10T19:39:46Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec&amp;lt;th&amp;gt;Proc&amp;lt;th&amp;gt;Monitor&amp;lt;th&amp;gt;PP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
* If PACT is FALSE, perform normal processing&lt;br /&gt;
* If PACT is TRUE, perform asynchronous-completion processing&lt;br /&gt;
&lt;br /&gt;
Normal processing:&lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links.&lt;br /&gt;
* Set PACT to FALSE&lt;br /&gt;
* If all input-link fetches succeeded, call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* If the SNAM routine set PACT to TRUE, then return.  In this case, we presume the routine has arranged that process will be called at some later time for asynchronous completion.&lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
Asynchronous-completion processing:&lt;br /&gt;
&lt;br /&gt;
* Call the routine specified by SNAM.&lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Set PACT to TRUE.&lt;br /&gt;
* Write the output values using the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1752</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1752"/>
		<updated>2009-09-10T19:07:32Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Use of the aSub Record */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec&amp;lt;th&amp;gt;Proc&amp;lt;th&amp;gt;Monitor&amp;lt;th&amp;gt;PP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm: &lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links. &lt;br /&gt;
* Call the routine specified by SNAM. &lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Place the output values on the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If the subroutine address has changed, post a change-of-value event and a log event  for the SADR field. If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamically Changing the User Routine called during Record Processing ==&lt;br /&gt;
The aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from the SUBL link. Thus, whatever is feeding this link can change the name of the routine before the aSub record is processed. In this case, the record looks in the symbol  table for the symbol name whenever the name of routine fetched from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during record processing is that specified in the SNAM field. Under these conditions, the SNAM  field can be changed by a Channel Access write to that field. Thus, during development  work, when it is often required to run a modified version of the routine, it will  no longer be a requirement to reboot the IOC and reload the database. A new routine  will be called during record processing if the routine is loaded with the vxWorks ld  command, and cau is used to put the name of the routine into the record's SNAM  field. After the SNAM field has been changed, the record automatically looks up the  symbol name in the symbol table. Note that, if the same routine name is used, this is  not a problem. The record finds the latest version of the code which has been loaded.  Obviously, one needs to take care of the amount of memory used in the system, if the vxWorks unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1751</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1751"/>
		<updated>2009-09-10T19:05:11Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* special */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec&amp;lt;th&amp;gt;Proc&amp;lt;th&amp;gt;Monitor&amp;lt;th&amp;gt;PP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm: &lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links. &lt;br /&gt;
* Call the routine specified by SNAM. &lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Place the output values on the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If the subroutine address has changed, post a change-of-value event and a log event  for the SADR field. If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of the  routine specified by SNAM. Set the SADR field equal to the subroutine address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed.&lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.6 Dynamically Changing the User Routine called during Record Processing  The&lt;br /&gt;
aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from&lt;br /&gt;
the  SUBL link. Thus, whatever is feeding this link can change the name of the&lt;br /&gt;
routine  before the aSub record is processed. In this case, the record looks&lt;br /&gt;
in the symbol  table for the symbol name whenever the name of routine fetched&lt;br /&gt;
from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during&lt;br /&gt;
record  processing is that specified in the SNAM field. Under these conditions,&lt;br /&gt;
the SNAM  field can be changed by a Channel Access write to that field. Thus,&lt;br /&gt;
during development  work, when it is often required to run a modified version of&lt;br /&gt;
the routine, it will  no longer be a requirement to reboot the IOC and reload&lt;br /&gt;
the database. A new routine  will be called during record processing if the&lt;br /&gt;
routine is loaded with the vxWorks ld  command, and cau is used to put the name&lt;br /&gt;
of the routine into the record's SNAM  field. After the SNAM field has been&lt;br /&gt;
changed, the record automatically looks up the  symbol name in the symbol table.&lt;br /&gt;
Note that, if the same routine name is used, this is  not a problem. The record&lt;br /&gt;
finds the latest version of the code which has been loaded.  Obviously, one&lt;br /&gt;
needs to take care of the amount of memory used in the system, if the  vxWorks&lt;br /&gt;
unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1750</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1750"/>
		<updated>2009-09-10T19:04:52Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* process */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec&amp;lt;th&amp;gt;Proc&amp;lt;th&amp;gt;Monitor&amp;lt;th&amp;gt;PP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm: &lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link. If the name is not NULL and it is not the same as the previous subroutine name, lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the current name, SNAM. &lt;br /&gt;
* Fetch the values from the input links. &lt;br /&gt;
* Call the routine specified by SNAM. &lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Place the output values on the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If the subroutine address has changed, post a change-of-value event and a log event  for the SADR field. If VAL has changed, post a change-of value and log event for  this field. If EFLG is set to ALWAYS, post change-of-value and log events for every  output field. If EFLG is set to ON CHANGE, post change-of-value and log events  for every output field which has changed. In the case of an array, an event will be  posted if any single element of the array has changed. If EFLG is set to NEVER, no  change-of-value or log events are posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE.&lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of&lt;br /&gt;
the  routine specified by SNAM. Set the SADR field equal to the subroutine&lt;br /&gt;
address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed. &lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.6 Dynamically Changing the User Routine called during Record Processing  The&lt;br /&gt;
aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from&lt;br /&gt;
the  SUBL link. Thus, whatever is feeding this link can change the name of the&lt;br /&gt;
routine  before the aSub record is processed. In this case, the record looks&lt;br /&gt;
in the symbol  table for the symbol name whenever the name of routine fetched&lt;br /&gt;
from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during&lt;br /&gt;
record  processing is that specified in the SNAM field. Under these conditions,&lt;br /&gt;
the SNAM  field can be changed by a Channel Access write to that field. Thus,&lt;br /&gt;
during development  work, when it is often required to run a modified version of&lt;br /&gt;
the routine, it will  no longer be a requirement to reboot the IOC and reload&lt;br /&gt;
the database. A new routine  will be called during record processing if the&lt;br /&gt;
routine is loaded with the vxWorks ld  command, and cau is used to put the name&lt;br /&gt;
of the routine into the record's SNAM  field. After the SNAM field has been&lt;br /&gt;
changed, the record automatically looks up the  symbol name in the symbol table.&lt;br /&gt;
Note that, if the same routine name is used, this is  not a problem. The record&lt;br /&gt;
finds the latest version of the code which has been loaded.  Obviously, one&lt;br /&gt;
needs to take care of the amount of memory used in the system, if the  vxWorks&lt;br /&gt;
unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1749</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1749"/>
		<updated>2009-09-10T19:03:41Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec&amp;lt;th&amp;gt;Proc&amp;lt;th&amp;gt;Monitor&amp;lt;th&amp;gt;PP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU.  If they have been defined, call them to get the size of the structure which is to passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function has been  defined, calloc the space required by the multiple of the number of elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user function has  been defined, calloc the space required by the multiple of the number of elements  and size returned from the user function. For the output fields, also calloc space to  hold the previous value of a field. This is required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine.&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm: &lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link.&lt;br /&gt;
If  the name is not NULL and it is not the same as the previous subroutine name,&lt;br /&gt;
lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the&lt;br /&gt;
current  name, SNAM. &lt;br /&gt;
* Fetch the values from the input links. &lt;br /&gt;
* Call the routine specified by SNAM. &lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Place the output values on the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If the subroutine address has changed, post a change-of-value event and a log&lt;br /&gt;
event  for the SADR field. If VAL has changed, post a change-of value and log&lt;br /&gt;
event for  this field. If EFLG is set to ALWAYS, post change-of-value and log&lt;br /&gt;
events for every  output field. If EFLG is set to ON CHANGE, post&lt;br /&gt;
change-of-value and log events  for every output field which has changed. In the&lt;br /&gt;
case of an array, an event will be  posted if any single element of the array&lt;br /&gt;
has changed. If EFLG is set to NEVER, no  change-of-value or log events are&lt;br /&gt;
posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE. &lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of&lt;br /&gt;
the  routine specified by SNAM. Set the SADR field equal to the subroutine&lt;br /&gt;
address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed. &lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.6 Dynamically Changing the User Routine called during Record Processing  The&lt;br /&gt;
aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from&lt;br /&gt;
the  SUBL link. Thus, whatever is feeding this link can change the name of the&lt;br /&gt;
routine  before the aSub record is processed. In this case, the record looks&lt;br /&gt;
in the symbol  table for the symbol name whenever the name of routine fetched&lt;br /&gt;
from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during&lt;br /&gt;
record  processing is that specified in the SNAM field. Under these conditions,&lt;br /&gt;
the SNAM  field can be changed by a Channel Access write to that field. Thus,&lt;br /&gt;
during development  work, when it is often required to run a modified version of&lt;br /&gt;
the routine, it will  no longer be a requirement to reboot the IOC and reload&lt;br /&gt;
the database. A new routine  will be called during record processing if the&lt;br /&gt;
routine is loaded with the vxWorks ld  command, and cau is used to put the name&lt;br /&gt;
of the routine into the record's SNAM  field. After the SNAM field has been&lt;br /&gt;
changed, the record automatically looks up the  symbol name in the symbol table.&lt;br /&gt;
Note that, if the same routine name is used, this is  not a problem. The record&lt;br /&gt;
finds the latest version of the code which has been loaded.  Obviously, one&lt;br /&gt;
needs to take care of the amount of memory used in the system, if the  vxWorks&lt;br /&gt;
unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1748</id>
		<title>RRM 3-14 Array Subroutine</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14_Array_Subroutine&amp;diff=1748"/>
		<updated>2009-09-10T18:56:02Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: First try&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= aSub - Array Subroutine =&lt;br /&gt;
&lt;br /&gt;
The aSub record is a variant of the 'sub' (subroutine) record with array-valued&lt;br /&gt;
input and output fields, whose types are user specifiable at database-configure time, and associated input and output links.&lt;br /&gt;
&lt;br /&gt;
The routine to be called at process time can be changed dynamically after the database  has been loaded.&lt;br /&gt;
The name of the routine can either be fetched in over a link from another record or written directly into&lt;br /&gt;
the SNAM field. &lt;br /&gt;
&lt;br /&gt;
The user can configure the record to decide when events will be posted for the output fields. This can be:&lt;br /&gt;
Never, Always or just when any element of an array changes value. &lt;br /&gt;
&lt;br /&gt;
The VAL field holds the value returned from the routine called during record processing. &lt;br /&gt;
&lt;br /&gt;
== Field Summary ==&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Field&amp;lt;th&amp;gt;Type&amp;lt;th&amp;gt;DCT&amp;lt;th&amp;gt;Initial&amp;lt;th&amp;gt;Access&amp;lt;th&amp;gt;Modify&amp;lt;th&amp;gt;Rec&amp;lt;th&amp;gt;Proc&amp;lt;th&amp;gt;Monitor&amp;lt;th&amp;gt;PP &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;LONG&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Ignore&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;RECCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Always&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;STRING&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Null&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;SHORT&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPB&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPU&amp;lt;td&amp;gt;INLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;B&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;U&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTB&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTU&amp;lt;td&amp;gt;OUTLINK&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;NA&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLB&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLU&amp;lt;td&amp;gt;NOACCESS&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVB&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVU&amp;lt;td&amp;gt;GBLCHOICE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;DOUBLE&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;0&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVB&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;...&amp;lt;td&amp;gt;... &lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVU&amp;lt;td&amp;gt;ULONG&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;1&amp;lt;td&amp;gt;Yes&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No&amp;lt;td&amp;gt;No &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Field Descriptions ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;Name&amp;lt;th&amp;gt;Summary&amp;lt;th&amp;gt;Description &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VAL&amp;lt;td&amp;gt;Value returned from process routine&amp;lt;td&amp;gt;This field holds the value returned from the user defined &lt;br /&gt;
process routine. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVAL&amp;lt;td&amp;gt;Old VAL&amp;lt;td&amp;gt;Previous VAL, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SADR&amp;lt;td&amp;gt;Subroutine Address &amp;lt;td&amp;gt;The address of the routine called at process time. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OSAD&amp;lt;td&amp;gt;Old SADR&amp;lt;td&amp;gt;Previous SADR, used to decide when to post events. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;LFLG&amp;lt;td&amp;gt;Link Flag&amp;lt;td&amp;gt;Tells the record whether to read or ignore the SUBL link. If &lt;br /&gt;
the value is READ, then the name of the subroutine to be &lt;br /&gt;
called at process time is read from SUBL. If the value is &lt;br /&gt;
IGNORE, the name of the subroutine is that currently held in &lt;br /&gt;
SNAM. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;EFLG&amp;lt;td&amp;gt;Event Flag&amp;lt;td&amp;gt;Tells the record when to post events on the output fields &lt;br /&gt;
VALA,...,VALU. If the value is NEVER, events are never &lt;br /&gt;
posted. If the value is ALWAYS, events are posted everytime &lt;br /&gt;
the record processes. If the value is ON CHANGE, events are &lt;br /&gt;
posted when any element of an array changes value. &lt;br /&gt;
Archiving and Value Change events are posted in each case. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SUBL&amp;lt;td&amp;gt;Subroutine Link&amp;lt;td&amp;gt;Where to get the subroutine name from. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INAM&amp;lt;td&amp;gt;Initialisation Routine &amp;lt;td&amp;gt;This is the name of the initialisation routine to be called once, &lt;br /&gt;
at iocInit. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;SNAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;This is the name of the routine to be called when the record &lt;br /&gt;
processes. Note, this can be overwritten by the SUBL link, if &lt;br /&gt;
LFLG is set to READ. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;ONAM&amp;lt;td&amp;gt;Process Routine&amp;lt;td&amp;gt;Old process subroutine name. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;STYP&amp;lt;td&amp;gt;Subroutine Symbol Type &amp;lt;td&amp;gt;Filled in by record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;BRSV&amp;lt;td&amp;gt;Severity for a subroutine return value less than 0. &amp;lt;td&amp;gt;Specifies the Alarm severity. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;PREC&amp;lt;td&amp;gt;Display Precision &amp;lt;td&amp;gt;Specifies the number of decimal places with which to display &lt;br /&gt;
the values of the fields VALA,...,VALU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;INPA,..., INPU&amp;lt;td&amp;gt;Input Link A,..., Input Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The input links from where the values of A,...,U are fetched &lt;br /&gt;
during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;A,...,U&amp;lt;td&amp;gt;Input Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The input fields which hold the scalar values or arrays fetched &lt;br /&gt;
in across the input links INPA,...,INPU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTA,..., FTU&amp;lt;td&amp;gt;Field Type of A Field Type of U &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the input values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOA..., NOU&amp;lt;td&amp;gt;Number of elements in A,.. Number of elements in U &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each input field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OUTA,..., OUTU&amp;lt;td&amp;gt;Output Link A,.. Output Link U &lt;br /&gt;
&amp;lt;td&amp;gt;The output links on which the scalars or arrays located at &lt;br /&gt;
VALA,...,VALU are placed during record processing. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;VALA,.., VALU&amp;lt;td&amp;gt;Output Fields&lt;br /&gt;
&amp;lt;td&amp;gt;The output fields which hold the scalar values or arrays &lt;br /&gt;
pushed out across the output links OUTA,...,OUTU. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;FTVA,..., FTVU&amp;lt;td&amp;gt;Field Type of VALA Field Type of VALU &lt;br /&gt;
&amp;lt;td&amp;gt;Field types of the output values. These can be CHAR, &lt;br /&gt;
STRING, DOUBLE, LONG, etc. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;OVLA,.., OVLU&amp;lt;td&amp;gt;Previous Outputs &lt;br /&gt;
&amp;lt;td&amp;gt;The previous values of the outputs. These are used to decide &lt;br /&gt;
when to post events if EFLG is set to ON CHANGE. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NOVA,..., NOVU&amp;lt;td&amp;gt;Number of elements in VALA Number of elements in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The number of elements in each output field. Default is 1 &lt;br /&gt;
(scalar value). An array is specified by setting this field to &lt;br /&gt;
greater than 1. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;TOVA,..., TOVU&amp;lt;td&amp;gt;Total Number of bytes in VALA Total Number of bytes in VALU &lt;br /&gt;
&amp;lt;td&amp;gt;The total number of bytes in each output field. These are used &lt;br /&gt;
internally by record processing and do not concern the user. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEA,..., NEU&amp;lt;td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;NEVA,..., NEVU&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support Routines ==&lt;br /&gt;
=== init_record ===&lt;br /&gt;
&lt;br /&gt;
This routine is called twice at iocInit. On the first call it does the&lt;br /&gt;
following: &lt;br /&gt;
&lt;br /&gt;
* Look for any user functions defined in the fields UFA-UFU and UFVA-UFVU. If &lt;br /&gt;
they have been defined, call them to get the size of the structure which is to&lt;br /&gt;
passed  across the link. If they are not defined, no routine is called. &lt;br /&gt;
* Calloc sufficient space to hold the number of input scalars and/or arrays&lt;br /&gt;
defined by  the settings of the fields FTA-FTU and NOA-NOU. If a user function&lt;br /&gt;
has been  defined, calloc the space required by the multiple of the number of&lt;br /&gt;
elements and size  returned from the user function. &lt;br /&gt;
* Calloc sufficient space to hold the number of output scalars and/or arrays&lt;br /&gt;
defined by  the settings of the fields FTVA-FTVU and NOVA-NOVU. If a user&lt;br /&gt;
function has  been defined, calloc the space required by the multiple of the&lt;br /&gt;
number of elements  and size returned from the user function. For the output&lt;br /&gt;
fields, also calloc space to  hold the previous value of a field. This is&lt;br /&gt;
required when the decision is made on  whether or not to post events. &lt;br /&gt;
&lt;br /&gt;
On the second call, it does the following: &lt;br /&gt;
&lt;br /&gt;
* Initializes SUBL if it is a constant link. &lt;br /&gt;
* Initializes each constant input link. &lt;br /&gt;
* If the field INAM is set, look-up the address of the routine and call it. &lt;br /&gt;
*If the field LFLG is set to IGNORE and SNAM is defined, look-up the address of&lt;br /&gt;
the  process routine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== process ===&lt;br /&gt;
This routine implements the following algorithm: &lt;br /&gt;
&lt;br /&gt;
* Set PACT to TRUE. &lt;br /&gt;
* If the field LFLG is set to READ, get the subroutine name from the SUBL link.&lt;br /&gt;
If  the name is not NULL and it is not the same as the previous subroutine name,&lt;br /&gt;
lookup  the subroutine address. Set the old subroutine name, ONAM, equal to the&lt;br /&gt;
current  name, SNAM. &lt;br /&gt;
* Fetch the values from the input links. &lt;br /&gt;
* Call the routine specified by SNAM. &lt;br /&gt;
* Set VAL equal to the return value from the routine specified by SNAM. &lt;br /&gt;
* Place the output values on the output links. &lt;br /&gt;
* Get the time of processing and put it into the timestamp field. &lt;br /&gt;
* If the subroutine address has changed, post a change-of-value event and a log&lt;br /&gt;
event  for the SADR field. If VAL has changed, post a change-of value and log&lt;br /&gt;
event for  this field. If EFLG is set to ALWAYS, post change-of-value and log&lt;br /&gt;
events for every  output field. If EFLG is set to ON CHANGE, post&lt;br /&gt;
change-of-value and log events  for every output field which has changed. In the&lt;br /&gt;
case of an array, an event will be  posted if any single element of the array&lt;br /&gt;
has changed. If EFLG is set to NEVER, no  change-of-value or log events are&lt;br /&gt;
posted for the output fields. &lt;br /&gt;
* Process the record on the end of the forward link, if one exists. &lt;br /&gt;
* Set PACT to FALSE. &lt;br /&gt;
&lt;br /&gt;
=== get_value ===&lt;br /&gt;
Fills in the values of struct valueDes so that they refer to VAL. &lt;br /&gt;
&lt;br /&gt;
=== get_precision ===&lt;br /&gt;
&lt;br /&gt;
Sets the display precision to the value of PREC for any of the output fields&lt;br /&gt;
VALA,...,  VALU. This routine could be called for any of these fields. &lt;br /&gt;
&lt;br /&gt;
=== cvt_dbaddr ===&lt;br /&gt;
&lt;br /&gt;
The purpose of this routine is to fill in the struct dbAddr for the field of the&lt;br /&gt;
record for  which it has been called. Typically, the number of elements in the&lt;br /&gt;
field, the field type  and the size of the field will be set in this routine.&lt;br /&gt;
For arrays, this record support routine  is essential. &lt;br /&gt;
&lt;br /&gt;
=== get_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine returns the current number of elements and the offset of the first&lt;br /&gt;
value for  an array. For this record, the offset field is always 0. &lt;br /&gt;
&lt;br /&gt;
=== put_array_info ===&lt;br /&gt;
&lt;br /&gt;
This routine is called after new values have been placed in an array. &lt;br /&gt;
&lt;br /&gt;
=== special ===&lt;br /&gt;
&lt;br /&gt;
This routine is called whenever the SNAM field changes. It is called twice, once&lt;br /&gt;
before  the change and once after. On the first call, the routine simply&lt;br /&gt;
returns. On the second  call, after SNAM has changed, it implements the&lt;br /&gt;
following algorithm: &lt;br /&gt;
&lt;br /&gt;
* If LFLG is set to IGNORE and SNAM is not NULL, then look-up the address of&lt;br /&gt;
the  routine specified by SNAM. Set the SADR field equal to the subroutine&lt;br /&gt;
address. &lt;br /&gt;
* Post change-of-value and log events for the SADR field, if this has changed. &lt;br /&gt;
&lt;br /&gt;
== Use of the aSub Record  ==&lt;br /&gt;
&lt;br /&gt;
Two aSub records can be used to transfer data between one another. These&lt;br /&gt;
records  can be located in the same IOC or in separate IOC's. The data can be a&lt;br /&gt;
scalar of any  type, an array, a user defined structure or an array of user&lt;br /&gt;
defined structures. &lt;br /&gt;
&lt;br /&gt;
Let us name the aSub record which is sending data, record A, and the aSub &lt;br /&gt;
record which is receiving the data, record B. There are some fields which must&lt;br /&gt;
be set-up  correctly in each record before the data transfer can occur without&lt;br /&gt;
error. The output field  types and the number of elements in the output fields&lt;br /&gt;
of record A must match the input  field types and number of elements in the&lt;br /&gt;
input fields of record B. Thus, combining the  two records is rather like a&lt;br /&gt;
jigsaw. Let us take an example. &lt;br /&gt;
&lt;br /&gt;
If 5 doubles are to be passed from the VALA field of record A to the A field of&lt;br /&gt;
record B,  then the following settings are necessary: &lt;br /&gt;
&lt;br /&gt;
Record A should have: FTVA = DOUBLE, NOVA = 5. &lt;br /&gt;
Record B should have: FTA = DOUBLE, NOA = 5. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1.6 Dynamically Changing the User Routine called during Record Processing  The&lt;br /&gt;
aSub record allows the user to dynamically change which routine is called &lt;br /&gt;
when the record processes. This can be done in two ways: &lt;br /&gt;
&lt;br /&gt;
* The LFLG field can be set to READ so that the name of the routine is read from&lt;br /&gt;
the  SUBL link. Thus, whatever is feeding this link can change the name of the&lt;br /&gt;
routine  before the aSub record is processed. In this case, the record looks&lt;br /&gt;
in the symbol  table for the symbol name whenever the name of routine fetched&lt;br /&gt;
from the link  changes. &lt;br /&gt;
* The LFLG field can be set to IGNORE. In this case, the routine called during&lt;br /&gt;
record  processing is that specified in the SNAM field. Under these conditions,&lt;br /&gt;
the SNAM  field can be changed by a Channel Access write to that field. Thus,&lt;br /&gt;
during development  work, when it is often required to run a modified version of&lt;br /&gt;
the routine, it will  no longer be a requirement to reboot the IOC and reload&lt;br /&gt;
the database. A new routine  will be called during record processing if the&lt;br /&gt;
routine is loaded with the vxWorks ld  command, and cau is used to put the name&lt;br /&gt;
of the routine into the record's SNAM  field. After the SNAM field has been&lt;br /&gt;
changed, the record automatically looks up the  symbol name in the symbol table.&lt;br /&gt;
Note that, if the same routine name is used, this is  not a problem. The record&lt;br /&gt;
finds the latest version of the code which has been loaded.  Obviously, one&lt;br /&gt;
needs to take care of the amount of memory used in the system, if the  vxWorks&lt;br /&gt;
unld command is never used.&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=1763</id>
		<title>RRM 3-14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=1763"/>
		<updated>2009-09-10T18:01:59Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* EPICS 3-14 Record Reference Manual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation is a revision of 3-13 documentation, as the software has been updated significantly since the docs were written.  The [[RRM 3-14 Editing Tasks|Editing Tasks]] page gives some ideas on what needs doing to bring it up to the R3.14.9 implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3-14 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson and Kazimierz Gofron&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-14 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-14 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-14 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-14 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-14 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-14 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-14 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-14 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-14 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-14 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-14 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-14 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-14 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-14 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-14 State|state - State]]&lt;br /&gt;
* [[RRM 3-14 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-14 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-14 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-14 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Array Subroutine|aSub - Array Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
=== Other Record Types Not in Base ===&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Archive|archive - Archive]]&lt;br /&gt;
* [[RRM 3-14 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-14 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-14 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-14 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-14 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-14 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-14 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-14 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-14 Wait|wait - Wait]]&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=1734</id>
		<title>RRM 3-14</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-14&amp;diff=1734"/>
		<updated>2009-05-26T15:16:07Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* EPICS 3-14 Record Reference Manual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation is a revision of 3-13 documentation, as the software has been updated significantly since the docs were written.  The [[RRM 3-14 Editing Tasks|Editing Tasks]] page gives some ideas on what needs doing to bring it up to the R3.14.9 implementation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3-14 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson&lt;br /&gt;
&lt;br /&gt;
Wiki version 3-14 created by Kazimierz Gofron&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-14 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-14 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-14 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-14 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-14 Archive|archive - Archive]]&lt;br /&gt;
* [[RRM 3-14 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-14 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-14 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-14 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-14 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-14 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-14 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-14 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-14 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-14 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-14 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-14 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-14 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-14 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-14 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-14 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-14 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-14 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-14 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-14 State|state - State]]&lt;br /&gt;
* [[RRM 3-14 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-14 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-14 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-14 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-14 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-14 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-14 Wait|wait - Wait]]&lt;br /&gt;
* [[RRM 3-14 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-14 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13&amp;diff=2688</id>
		<title>RRM 3-13</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13&amp;diff=2688"/>
		<updated>2009-05-26T15:15:11Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* EPICS 3.13 Record Reference Manual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation needs revising, as the software has been updated significantly since the docs were written.  The [[RRM 3-13 Editing Tasks|Editing Tasks]] page gives some ideas on what needs doing to bring it up to the R3.13.10 implementation.  However, '''please''' do ''not'' update any of these pages to cover the 3.14 releases of EPICS; we'll put up a separate manual for that version after the R3.13.10 documentation is up to scratch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3.13 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-13 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-13 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-13 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-13 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-13 Archive|archive - Archive]]&lt;br /&gt;
* [[RRM 3-13 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-13 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-13 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-13 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-13 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-13 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-13 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-13 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-13 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-13 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-13 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-13 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-13 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-13 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-13 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-13 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-13 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-13 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-13 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-13 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-13 State|state - State]]&lt;br /&gt;
* [[RRM 3-13 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-13 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-13 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-13 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-13 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-13 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-13 Wait|wait - Wait]]&lt;br /&gt;
* [[RRM 3-13 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=How_to_make_your_EPICS_driver_operating_system_independent&amp;diff=1396</id>
		<title>How to make your EPICS driver operating system independent</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=How_to_make_your_EPICS_driver_operating_system_independent&amp;diff=1396"/>
		<updated>2006-08-18T19:18:20Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: added mention of epicsThreadSleepQuantum()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=How to make your EPICS driver operating system independent=&lt;br /&gt;
&lt;br /&gt;
'''W. Eric Norum'''&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
The following table shows the changes made to some existing drivers to allow them to be used on systems other than vxWorks. Note that it is a very preliminary start at a set of conversion instructions. There's still no `cookbook' document to guide you, but many drivers can be converted without doing much more than applying the translations shown. A technique that I've found works well is to first change all the &amp;lt;code&amp;gt;#include&amp;lt;/code&amp;gt; statements that mention vxWorks header files to their OSI equivalents, then enter a compile-edit cycle until all compile errors have been eliminated.&lt;br /&gt;
&lt;br /&gt;
==Conversions==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;3&amp;quot;&lt;br /&gt;
! align=&amp;quot;CENTER&amp;quot; | '''vxWorks'''&lt;br /&gt;
! align=&amp;quot;CENTER&amp;quot; | '''OSI'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;vxWorks.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;stdlib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;epicsStdlib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;stdio.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;epicsStdioRedirect.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;iosLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;taskLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;epicsThread.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;memLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;rebootLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;epicsExit.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;intLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;epicsInterrupt.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;lstLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;vme.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;devLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;sysLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;iv.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
| &amp;lt;code&amp;gt;#include &amp;lt;epicsExport.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;#include &amp;lt;iocsh.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;ERROR&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;OK&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;#include &amp;lt;semLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 SEM_ID flag = semBCreate(SEM_Q_PRIORITY, SEM_EMPTY);&lt;br /&gt;
 semGive(flag);&lt;br /&gt;
 semTake(flag, WAIT_FOREVER);&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;#include &amp;lt;epicsEvent.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 epicsEventId flag = epicsEventMustCreate(epicsEventEmpty);&lt;br /&gt;
 epicsEventSignal(flag);&lt;br /&gt;
 epicsEventMustWait(flag);&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;#include &amp;lt;semLib.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 SEM_ID Lock = semMCreate(SEM_Q_PRIORITY);&lt;br /&gt;
 semTake(Lock, WAIT_FOREVER);&lt;br /&gt;
 semGive(Lock);&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;#include &amp;lt;epicsMutex.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 epicsMutexId Lock = epicsMutexMustCreate();&lt;br /&gt;
 epicsMutexLock(Lock);&lt;br /&gt;
 epicsMutexUnlock(Lock);&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;taskDelay(1)&amp;lt;/code&amp;gt;&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | To generate a `short' delay:&lt;br /&gt;
 epicsThreadSleep(0.001)&lt;br /&gt;
This works because the operating system specific layer ensures a delay of at least one system clock tick for epicsThreadSleep arguments greater than 0.&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;taskDelay(30)&amp;lt;/code&amp;gt;&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | Much old code assumes a 60 Hz vxWorks system clock. On such systems the equivalent for the command shown would be:&lt;br /&gt;
 epicsThreadSleep(0.5)&lt;br /&gt;
Of course, other code may assumes a 50 Hz or 100 Hz system clock rate.  You can&lt;br /&gt;
find out what your system clock rate is using epicsThreadSleepQuantum(), which returns the clock period in seconds.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;taskSuspend(0)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;epicsThreadSuspendSelf()&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;intConnect(INUM_TO_IVEC(IrqVector), IrqHandler, pLink)&amp;lt;/code&amp;gt;&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;devConnectInterruptVME(IrqVector, IrqHandler, pLink)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;sysIntEnable(IrqLevel)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;devEnableInterruptLevelVME(IrqLevel)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;sysBusToLocalAdrs(VME_AM_SUP_SHORT_IO, (char*)CardAddress, (char**)&amp;amp;ErLink[Card].pEr)&amp;lt;/code&amp;gt;&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;devRegisterAddress(&amp;quot;apsEr&amp;quot;, atVMEA16, CardAddress, 0x40, (void*)&amp;amp;ErLink[Card].pEr)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;vxMemProbe(pReg, READ, sizeof(short), &amp;amp;value)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;devReadProbe(sizeof(short), pReg, &amp;amp;value)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;vxMemProbe(pReg,WRITE,sizeof(short), &amp;amp;value)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;devWriteProbe(sizeof(short), pReg, &amp;amp;value)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;key = intLock()&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;key = epicsInterruptLock()&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;intUnlock(key)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;epicsInterrupUnlock(key)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;rebootHookAdd((FUNCPTR)ErRebootFunc)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;epicsAtExit(ErRebootFunc, NULL)&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | &amp;lt;code&amp;gt;#include &amp;lt;fast_lock.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
 FAST_LOCK lock;&lt;br /&gt;
 FASTLOCKINIT(&amp;amp;mzconf[card].lock);&lt;br /&gt;
 FASTLOCKFREE(&amp;amp;mzconf[card].lock);&lt;br /&gt;
 FASTLOCK(&amp;amp;mzconf[card].lock);&lt;br /&gt;
 FASTUNLOCK(&amp;amp;mzconf[card].lock);&lt;br /&gt;
| valign=&amp;quot;TOP&amp;quot; | You'll have to use your judgement here. If the section of code being protected is quick (less than a few microseconds) it's reasonable to simply disable interrupts while the code is active. In this case you can remove the 'lock' variable and the init/free operations and then add a local 'key' variable and replace the lock/unlock operations with epicsInterruptLock/Unlock operations. If the section of code being protected is longer you'll have to convert the FASTLOCK to an EPICS mutex.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;code&amp;gt;taskSpawn(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
| &amp;lt;code&amp;gt;epicsThreadCreate(...)&amp;lt;/code&amp;gt;&lt;br /&gt;
You should consider rewriting the driver to use the &amp;quot;worker thread&amp;quot; environment provided by the ASYN package. This is likely to result in a shorter, simpler, and more robust driver.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Some other changes==&lt;br /&gt;
&lt;br /&gt;
* Some R3.13 record support database definitions explicitly mention all fields rather than including dbCommon.dbd. This can cause problems with FAST_LOCK. The solution is to add &amp;lt;code&amp;gt;include &amp;quot;dbCommon.dbd&amp;quot;&amp;lt;/code&amp;gt; at the beginning of the file in question and to remove all entries for the fields provided by dbCommon.dbd.&lt;br /&gt;
* You should set up IOC shell command registrations for all `configure' functions and for any other commands you may need to call from the IOC shell. Here's an example of a fairly complex configuration command:&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
 /*&lt;br /&gt;
  * IOC shell command registration&lt;br /&gt;
  */&lt;br /&gt;
 #include &amp;lt;iocsh.h&amp;gt;&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg0 = { &amp;quot;card&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg1 = { &amp;quot;VME A16 offset&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg2 = { &amp;quot;VME memory offset&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg3 = { &amp;quot;interrupt vector&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg4 = { &amp;quot;interrupt level&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg5 = { &amp;quot;use DMA&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg6 = { &amp;quot;nchannels&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg vtr10012ConfigArg7 = { &amp;quot;kilosamplesPerChan&amp;quot;,iocshArgInt};&lt;br /&gt;
 static const iocshArg *vtr10012ConfigArgs[] = {&lt;br /&gt;
     &amp;amp;vtr10012ConfigArg0, &amp;amp;vtr10012ConfigArg1, &amp;amp;vtr10012ConfigArg2,&lt;br /&gt;
     &amp;amp;vtr10012ConfigArg3, &amp;amp;vtr10012ConfigArg4, &amp;amp;vtr10012ConfigArg5,&lt;br /&gt;
     &amp;amp;vtr10012ConfigArg6,&amp;amp;vtr10012ConfigArg7};&lt;br /&gt;
 static const iocshFuncDef vtr10012ConfigFuncDef =&lt;br /&gt;
                       {&amp;quot;vtr10012Config&amp;quot;,8,vtr10012ConfigArgs};&lt;br /&gt;
 static void vtr10012ConfigCallFunc(const iocshArgBuf *args)&lt;br /&gt;
 {&lt;br /&gt;
     vtr10012Config(args[0].ival, args[1].ival, args[2].ival,&lt;br /&gt;
                  args[3].ival, args[4].ival, args[5].ival,&lt;br /&gt;
                  args[6].ival, args[7].ival);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
  * This routine is called before multitasking has started, so there's&lt;br /&gt;
  * no race condition in the test/set of firstTime.&lt;br /&gt;
  */&lt;br /&gt;
 static void&lt;br /&gt;
 drvVtr10012RegisterCommands(void)&lt;br /&gt;
 {&lt;br /&gt;
     static int firstTime = 1;&lt;br /&gt;
     if (firstTime) {&lt;br /&gt;
         iocshRegister(&amp;amp;vtr10012ConfigFuncDef,vtr10012ConfigCallFunc);&lt;br /&gt;
         firstTime = 0;&lt;br /&gt;
     }&lt;br /&gt;
 }&lt;br /&gt;
 epicsExportRegistrar(drvVtr10012RegisterCommands);&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
You must also provide a corresponding registrar statement in a &amp;lt;code&amp;gt;.dbd&amp;lt;/code&amp;gt; file:&lt;br /&gt;
 registrar(drvVtr10012RegisterCommands)&lt;br /&gt;
* If your driver provides functions that are referred to by name from database files you must:&lt;br /&gt;
** &amp;lt;code&amp;gt;#include &amp;lt;registryFunction.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
** Add an &amp;lt;code&amp;gt;epicsExportFuncion()&amp;lt;/code&amp;gt; statement for each such function.&lt;br /&gt;
** Add a corresponding &amp;lt;code&amp;gt;function&amp;lt;/code&amp;gt; statement in a &amp;lt;code&amp;gt;.dbd&amp;lt;/code&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
==Additional Information==&lt;br /&gt;
&lt;br /&gt;
The procedure for converting a support module from R3.13 to R3.14 is described in the [http://www.aps.anl.gov/epics/base/R3-14/8-docs/ConvertingR3.13AppsToR3.14.html Converting R3.13 Apps to R3.14] document.&lt;br /&gt;
&lt;br /&gt;
==Acknowledgments==&lt;br /&gt;
&lt;br /&gt;
* Peter Denison (Diamond) for getting me started on this document and for useful suggestions.&lt;br /&gt;
* Steve Shoaf and Nick DiMonte (ANL) for some early conversions.&lt;br /&gt;
* Andrew Johnson for 'wikifying' the contents and setting up this page.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
 Eric Norum 2006-08-17&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Data_Fanout&amp;diff=2795</id>
		<title>RRM 3-13 Data Fanout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Data_Fanout&amp;diff=2795"/>
		<updated>2006-06-29T21:35:51Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: Added description of SELM, SELN, SELL fields&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RRM 3-13|EPICS Record Reference Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= dfanout - Data Fanout =&lt;br /&gt;
&lt;br /&gt;
: Johnny Tang, Matthew Bickley, and Chip Watson&lt;br /&gt;
: Continuous Electron Beam Accelerator Facility&lt;br /&gt;
: Southeastern Universities Research Association&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The dfanout record or data fanout record is used to forward data to up to eight other records. It's similar to the fanout record except that the capability to forward data has been added to it. It has no associated device support.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record can be classified into the following categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* desired output parameters&lt;br /&gt;
* write parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
* monitor parameters&lt;br /&gt;
* run-time and simulation mode parameters&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The data fanout record has the standard fields for specifying under what circumstances it will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the data fanout record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Desired Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The data fanout record must specify where the desired output value originates, i.e., the data which it is to forward to the records in its output links. The output mode select (OMSL) field determines whether the output originates from another record or from run-time database access. When set to &amp;lt;CODE&amp;gt;closed loop&amp;lt;/CODE&amp;gt;, the desired output is retrieved from the link specified in the desired output (DOL) field, which can specify either a database or channel access link, and placed into the VAL field. When set to &amp;lt;CODE&amp;gt;supervisory&amp;lt;/CODE&amp;gt;, the desired output can be written to the VAL field via dpPuts at run-time.&lt;br /&gt;
&lt;br /&gt;
The DOL field can also be a constant in which case the VAL field is initialized to the constant value.&lt;br /&gt;
&lt;br /&gt;
Note that there are no conversion parameters, so the desired output value undergoes no conversions before it is sent out to the output links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOL&amp;lt;TD&amp;gt;Desired Output Location (Input Link)&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OMSL&amp;lt;TD&amp;gt;Output Mode Select &amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;VAL &amp;lt;TD&amp;gt;Value Field&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Write Parameters ===&lt;br /&gt;
&lt;br /&gt;
The OUTA-OUTH fields specify where VAL is to be sent. Each field that is to forward data must specify an address to another record. See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on specifying links.&lt;br /&gt;
&lt;br /&gt;
The SELL, SELM, and SELN fields specify which output link(s) are to be used.&lt;br /&gt;
SELM is a menu, with the following choices: &amp;quot;All&amp;quot;, &amp;quot;Specified&amp;quot;, &amp;quot;Mask&amp;quot;.  If&lt;br /&gt;
SELM==&amp;quot;All&amp;quot;, then all output links are used, and the values of SELL and SELN&lt;br /&gt;
are ignored.&lt;br /&gt;
&lt;br /&gt;
If SELM==&amp;quot;Specified&amp;quot;, then the value of SELN is used to specify a single link&lt;br /&gt;
which will be used.  If SELN==0, then no link will be used; if SELN==1, then OUTA will be used, and so on.&lt;br /&gt;
&lt;br /&gt;
SELN can either have its value set directly, or have its value retrieved from&lt;br /&gt;
another EPICS PV.  If SELL is a valid PV link, then SELN will be set to the&lt;br /&gt;
value of the linked PV&lt;br /&gt;
&lt;br /&gt;
If SELM==&amp;quot;Mask&amp;quot;, then SELN will be treated as a bit mask.  If bit one of SELN&lt;br /&gt;
is set, then OUTA will be used, if bit two is set, OUTB will be used.  Thus&lt;br /&gt;
if SELN==5, OUTC and OUTA will be used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Link A&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Link B&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTC&amp;lt;TD&amp;gt;Output Link C&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTD&amp;lt;TD&amp;gt;Output Link D&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTE&amp;lt;TD&amp;gt;Output Link E&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTF&amp;lt;TD&amp;gt;Output Link F&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTG&amp;lt;TD&amp;gt;Output Link G&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTH&amp;lt;TD&amp;gt;Output Link H&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. They display the value and other parameters of the data fanout record either textually or graphically.&lt;br /&gt;
&lt;br /&gt;
The EGU field can contain a string of up to 16 characters describing the value in the VAL field.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields determine the upper and lower display limits for graphics displays and the upper and lower control limits for control displays. They apply to the VAL, HIHI, HIGH, LOW, and LOLO fields. The record support routines &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; or &amp;lt;CODE&amp;gt;get_control_double&amp;lt;/CODE&amp;gt; retrieve HOPR and LOPR&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;TD&amp;gt;High Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;&amp;amp;nbsp;&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for data fanouts are the SCAN, READ, INVALID, and limit alarms. The SCAN and READ alarms are called by the record routines. The limit alarms are configured by the user in the HIHI, LOLO, HIGH, and LOW fields using floating-point values. The limit alarms apply only to the VAL field. The severity for each of these limits is specified in the corresponding field (HHSV, LLSV, HSV, LSV) and can be either NO_ALARM, MINOR, or MAJOR. In the hysteresis field (HYST) can be entered a number which serves as the deadband on the limit alarms.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Alarm Specification|Alarm Specification]] for a complete explanation of alarms and these fields. [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] lists other fields related to a alarms that are common to all record types.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;TD&amp;gt;FLOAT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;TD&amp;gt;Hihi Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;TD&amp;gt;High Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;TD&amp;gt;Low Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;TD&amp;gt;Lolo Alarm Severity&amp;lt;TD&amp;gt;[[RRM 3-13 Menu Choices|GBLCHOICE]]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors placed on the VAL field. The monitors are sent when the value field exceeds the last monitored field by the specified deadband, ADEL for archiver monitors and MDEL for all other types of monitors. If these fields have a value of zero, everytime the value changes, a monitor will be triggered; if they have a value of -1, everytime the record is scanned, monitors are triggered. See [[RRM 3-13 Concepts#Monitor Specification|Monitor Specification]] for a complete explanation of monitors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-Time Parameters and Simulation Mode Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used by the run-time code for processing the data fanout record. They are not configurable. They are used to implement the hysteresis factors for monitor callbacks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;TD&amp;gt;Last Alarm Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;TD&amp;gt;Last Archiver Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;TD&amp;gt;Last Value Change Monitor Trigger Value&amp;lt;TD&amp;gt;DOUBLE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== init_record() ====&lt;br /&gt;
&lt;br /&gt;
This routine initializes all output links that are defined. Then it initializes DOL is DOL is a constant or PV_LINK. When initializing the output links and the DOL link, a non-zero value is returned if an error occurs.&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== get_value() ====&lt;br /&gt;
&lt;br /&gt;
This routine fills in the members of &amp;lt;CODE&amp;gt;struct valueDes&amp;lt;/CODE&amp;gt; with the VAL fields value and characteristics.&lt;br /&gt;
&lt;br /&gt;
==== get_units() ====&lt;br /&gt;
&lt;br /&gt;
The routine copies the string specified in the EGU field to the location specified by a pointer which is passed to the routine.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double() ====&lt;br /&gt;
&lt;br /&gt;
If the referenced field is VAL, HIHI, HIGH, LOW, or LOLO, this routine sets the &amp;lt;CODE&amp;gt;upper_disp_limit&amp;lt;/CODE&amp;gt; member of the &amp;lt;CODE&amp;gt;dbr_grDouble&amp;lt;/CODE&amp;gt; structure to HOPR and the &amp;lt;CODE&amp;gt;lower_disp_limit&amp;lt;/CODE&amp;gt; member to LOPR. If the referenced field is not one of the above fields, then the &amp;lt;CODE&amp;gt;recGblGetControlDouble()&amp;lt;/CODE&amp;gt; routine is called.&lt;br /&gt;
&lt;br /&gt;
==== get_control_double() ====&lt;br /&gt;
&lt;br /&gt;
Same as the &amp;lt;CODE&amp;gt;get_graphic_double&amp;lt;/CODE&amp;gt; routine except that it uses the &amp;lt;CODE&amp;gt;dbr_ctrlDouble&amp;lt;/CODE&amp;gt; structure.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double() ====&lt;br /&gt;
&lt;br /&gt;
This sets the members of the &amp;lt;CODE&amp;gt;dbr_alDouble&amp;lt;/CODE&amp;gt; structure to the specified alarm limits if the referenced field is VAL:&lt;br /&gt;
&lt;br /&gt;
 upper_alarm_limit = HIHI&lt;br /&gt;
 upper_warning_limit = HIGHT&lt;br /&gt;
 lower_warning_limit = LOW&lt;br /&gt;
 lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
If the referenced field is not VAL, the &amp;lt;CODE&amp;gt;recGblGetAlarmDouble()&amp;lt;/CODE&amp;gt; routine is called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
# The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine first retrieves a value for DOL and places it in VAL if OMSL is set to closed loop mode. If ann error occurs, then UDF is set to FALSE.&lt;br /&gt;
# PACT is set TRUE.&lt;br /&gt;
# VAL is then sent to all the records specified in the OUTA-OUTH fields by calling the &amp;lt;CODE&amp;gt;recGblPutLinkValue()&amp;lt;/CODE&amp;gt; for each link.&lt;br /&gt;
# Alarms are checked and monitors are called if conditions apply.&lt;br /&gt;
# The data fanout's own forward link is then processed.&lt;br /&gt;
# PACT is set FALSE, and the &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine returns. A -1 is returned if there was an error writing values to one of the output links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=2827</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=2827"/>
		<updated>2006-06-09T15:29:06Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and is not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; may be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.  (EPICS 3.14-compatible version only.)&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon.  This field is not very useful, because it's unlikely to pertain to all 16 value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They have the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.  For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1371</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1371"/>
		<updated>2006-06-09T15:27:08Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and is not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; may be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon.  This field is not very useful, because it's unlikely to pertain to all 16 value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They have the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.  For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1370</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1370"/>
		<updated>2006-06-09T15:11:56Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and is not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; may be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=2830</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=2830"/>
		<updated>2006-06-09T15:11:39Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Text that does not apply to the 3.13-compatible version is rendered in &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;blue&amp;lt;/font&amp;gt;.  Documentation specific to the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions and operands.  The record has 12 numeric fields (A...L) and 12 string fields (AA...LL), which are used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and produces both numeric and string results, in the VAL and SVAL fields, respectively.  The record's output link writes string or numeric data, depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[#Output Parameters|Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[#Output Parameters|Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to standard EPICS Calc expressions, such as those used with the Calcout record.  But in place of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record uses the &amp;lt;i&amp;gt;sCalc&amp;lt;/i&amp;gt; engine, a separate piece of software, which normally is [[#Availability|distributed]] with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operator '!=' (not equal) is a permitted alternatives '#'.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Max (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Min (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'b'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-|&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete first occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;|-&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete last occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;TR_ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is non-zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;WAIT&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wait for completion?&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Menu&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;No&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met, either execute the output link (and output event) immediately (if ODLY=0), or schedule a callback to do so after the specified interval. See the explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Call device support to&amp;lt;/font&amp;gt; execute output link.&lt;br /&gt;
# If we're not waiting for the output delay to expire, or for a completion callback, process the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;call device support to&amp;lt;/font&amp;gt; write the value of OVAL to &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;device or&amp;lt;/font&amp;gt; PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  The 3.14-compatible version is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.  The 3.13-compatible version is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module of a 3.13-compatible synApps distribution.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1369</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1369"/>
		<updated>2006-06-09T15:02:51Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and is not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; may be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1367</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1367"/>
		<updated>2006-06-09T15:01:35Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Expression Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; is not blank and not simply a constant initializer, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; will be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1368</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1368"/>
		<updated>2006-06-08T22:11:38Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Text that does not apply to the 3.13-compatible version is rendered in &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;blue&amp;lt;/font&amp;gt;.  Documentation specific to the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions and operands.  The record has 12 numeric fields (A...L) and 12 string fields (AA...LL), which are used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and produces both numeric and string results, in the VAL and SVAL fields, respectively.  The record's output link writes string or numeric data, depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[#Output Parameters|Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[#Output Parameters|Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to standard EPICS Calc expressions, such as those used with the Calcout record.  But in place of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record uses the &amp;lt;i&amp;gt;sCalc&amp;lt;/i&amp;gt; engine, a separate piece of software, which normally is [[#Availability|distributed]] with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Max (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Min (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'b'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-|&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete first occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;|-&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete last occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;TR_ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is non-zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;WAIT&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wait for completion?&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Menu&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;No&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm status and severity to change. If so, NSEV, NSTA and LALM are set. It also honors the alarm hysteresis factor (HYST). Thus the value must change by at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met, either execute the output link (and output event) immediately (if ODLY=0), or schedule a callback to do so after the specified interval. See the explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Call device support to&amp;lt;/font&amp;gt; execute output link.&lt;br /&gt;
# If we're not waiting for the output delay to expire, or for a completion callback, process the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;call device support to&amp;lt;/font&amp;gt; write the value of OVAL to &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;device or&amp;lt;/font&amp;gt; PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  The 3.14-compatible version is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.  The 3.13-compatible version is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module of a 3.13-compatible synApps distribution.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1365</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1365"/>
		<updated>2006-06-08T21:53:12Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Text that does not apply to the 3.13-compatible version is rendered in &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;blue&amp;lt;/font&amp;gt;.  Documentation specific to the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions and operands.  The record has 12 numeric fields (A...L) and 12 string fields (AA...LL), which are used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and produces both numeric and string results, in the VAL and SVAL fields, respectively.  The record's output link writes string or numeric data, depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[#Output Parameters|Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[#Output Parameters|Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to standard EPICS Calc expressions, such as those used with the Calcout record.  But in place of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record uses the &amp;lt;i&amp;gt;sCalc&amp;lt;/i&amp;gt; engine, a separate piece of software, which normally is [[#Availability|distributed]] with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Max (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Min (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'b'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-|&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete first occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;|-&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete last occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;TR_ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;WAIT&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wait for completion?&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Menu&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;No&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Call device support to&amp;lt;/font&amp;gt; execute output link.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;call device support to&amp;lt;/font&amp;gt; write the value of OVAL to &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;device or&amp;lt;/font&amp;gt; PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  The 3.14-compatible version is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.  The 3.13-compatible version is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module of a 3.13-compatible synApps distribution.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1364</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1364"/>
		<updated>2006-06-08T21:50:52Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Text that does not apply to the 3.13-compatible version is rendered in &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;blue&amp;lt;/font&amp;gt;.  Documentation specific to the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions and operands.  The record has 12 numeric fields (A...L) and 12 string fields (AA...LL), which are used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and produces both numeric and string results, in the VAL and SVAL fields, respectively.  The record's output link writes string or numeric data, depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[#Output Parameters|Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[#Output Parameters|Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to standard EPICS Calc expressions, such as those used with the Calcout record.  But in place of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record uses the &amp;lt;i&amp;gt;sCalc&amp;lt;/i&amp;gt; engine, a separate piece of software, which normally is [[#Availability|distributed]] with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Max (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Min (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-|&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete first occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;|-&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete last occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;TR_ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;WAIT&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wait for completion?&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Menu&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;No&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Call device support to&amp;lt;/font&amp;gt; execute output link.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;call device support to&amp;lt;/font&amp;gt; write the value of OVAL to &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;device or&amp;lt;/font&amp;gt; PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  The 3.14-compatible version is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.  The 3.13-compatible version is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module of a 3.13-compatible synApps distribution.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1363</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1363"/>
		<updated>2006-06-08T21:23:58Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: Distinguish 3.14 from 3.13 with color&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Text that does not apply to the 3.13-compatible version is rendered in &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;blue&amp;lt;/font&amp;gt;.  Documentation of the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions and operands.  The record has 12 string fields (AA...LL) used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results.  The record's output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[#Output Parameters|Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[#Output Parameters|Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to standard EPICS Calc expressions, such as those used with the Calcout record.  But in place of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record uses the &amp;lt;i&amp;gt;sCalc&amp;lt;/i&amp;gt; engine, a separate piece of software, which normally is [[#Availability|distributed]] with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants S2R (arc-seconds-to-radians) and R2S are supported.&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The functions MIN() and MAX() may have more than two arguments.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported.&amp;lt;/font&amp;gt;&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Max (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;amp;lt;&amp;amp;amp;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Min (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-or-more&amp;lt;/font&amp;gt;-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;-|&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete first occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;|-&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Delete last occurrence of substring (binary)&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;TR_ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;ESC&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;WAIT&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Wait for completion?&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Menu&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Yes&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;No&amp;lt;/font&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;Call device support to&amp;lt;/font&amp;gt; execute output link.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;call device support to&amp;lt;/font&amp;gt; write the value of OVAL to &amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;device or&amp;lt;/font&amp;gt; PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  The 3.14-compatible version is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.  The 3.13-compatible version is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module of a 3.13-compatible synApps distribution.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1362</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1362"/>
		<updated>2006-06-08T18:31:54Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: /* Expression Parameters */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Documentation of the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions in addition to numeric expressions.  The record has 12 string fields (AA...LL) used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results.  The record's output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to standard EPICS Calc expressions, such as those used with the Calcout record.  But in place of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record uses the &amp;lt;i&amp;gt;sCalc&amp;lt;/i&amp;gt; engine, a separate piece of software, which normally is [[#Availability|distributed]] with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Max (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Min (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-|&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete last occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TR_ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WAIT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Wait for completion?&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
See the EPICS Record Reference Manual, for more on the record name (NAME) and&lt;br /&gt;
description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, call device support to write the value of OVAL to device or PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1361</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1361"/>
		<updated>2006-06-08T18:25:00Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: Added table of expression parameters&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Documentation of the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions in addition to numeric expressions.  The record has 12 string fields (AA...LL) used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results.  The record's output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Infix expression&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;String[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to Calcout-record expression described elsewhere in this manual.  But instead of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record expressions are handled by the sCalc engine, a separate piece of software that normally is distributed along with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Max (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Min (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-|&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete last occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TR_ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WAIT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Wait for completion?&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
See the EPICS Record Reference Manual, for more on the record name (NAME) and&lt;br /&gt;
description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, call device support to write the value of OVAL to device or PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1360</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1360"/>
		<updated>2006-06-07T21:47:33Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Documentation of the 3.13-compatible version is currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions in addition to numeric expressions.  The record has 12 string fields (AA...LL) used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results.  The record's output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to Calcout-record expression described elsewhere in this manual.  But instead of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record expressions are handled by the sCalc engine, a separate piece of software that normally is distributed along with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Max (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Min (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-|&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete last occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TR_ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WAIT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Wait for completion?&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
See the EPICS Record Reference Manual, for more on the record name (NAME) and&lt;br /&gt;
description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, call device support to write the value of OVAL to device or PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1359</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1359"/>
		<updated>2006-06-07T21:46:57Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;i&amp;gt;This page actually describes the EPICS-3.14-compatible version of the sCalcout record.  Documentation of the 3.13-compatible version are currently not available in this format, but may be found in the 'std' module of a 3.13-compatible synApps package.&amp;lt;/i&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions in addition to numeric expressions.  The record has 12 string fields (AA...LL) used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results.  The record's output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to Calcout-record expression described elsewhere in this manual.  But instead of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record expressions are handled by the sCalc engine, a separate piece of software that normally is distributed along with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Max (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Min (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-|&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete last occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TR_ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WAIT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Wait for completion?&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
See the EPICS Record Reference Manual, for more on the record name (NAME) and&lt;br /&gt;
description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;, call device support to write the value of OVAL to device or PV specified by the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1358</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1358"/>
		<updated>2006-06-07T21:39:26Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions in addition to numeric expressions.  The record has 12 string fields (AA...LL) used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results.  The record's output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to Calcout-record expression described elsewhere in this manual.  But instead of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record expressions are handled by the sCalc engine, a separate piece of software that normally is distributed along with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a non-blank input link is associated with this field, then it may&lt;br /&gt;
not be modified.  This is true even if the input link is invalid (in which case, the value will be 0, for a numeric field, or &amp;quot;Huh?&amp;quot;, for a string field).&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Max (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Min (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-|&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete last occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TR_ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.)  In other words, string arguments &amp;lt;i&amp;gt;delimit&amp;lt;/i&amp;gt; the substring they are specifying without participating in it.)&lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WAIT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Wait for completion?&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
See the EPICS Record Reference Manual, for more on the record name (NAME) and&lt;br /&gt;
description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform&lt;br /&gt;
for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by&lt;br /&gt;
the field IVOA.&lt;br /&gt;
&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;,&lt;br /&gt;
call device support to write the value of OVAL to device or PV specified by&lt;br /&gt;
the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1357</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1357"/>
		<updated>2006-06-07T21:19:04Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: 3.14  version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions in addition to numeric expressions.  The record has 12 string fields (AA...LL) used as input variables for the expression.  It calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results.  The record's output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into the following categories:&lt;br /&gt;
&lt;br /&gt;
* Scan Parameters&lt;br /&gt;
* Read Parameters&lt;br /&gt;
* Expression Parameters&lt;br /&gt;
* Output Parameters&lt;br /&gt;
* Operator Display Parameters&lt;br /&gt;
* Alarm Parameters&lt;br /&gt;
* Monitor Parameters&lt;br /&gt;
* Run-Time Parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 for numeric values (INPA&amp;amp;rarr;A, INPB&amp;amp;rarr;B, ... INPL&amp;amp;rarr;L); and 12  for string values (INAA&amp;amp;rarr;AA, INBB&amp;amp;rarr;BB, ... INLL&amp;amp;rarr;LL). The fields can be database links, channel access links, or constants. If they are links, they must contain a PV name. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, ... INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, ... ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [[Operator Display Parameters]] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has the fields CALC and OCAL, in which the developer or user can enter an infix expression to be evaluated when the record is processed.  The numeric value resulting from evaluation of CALC will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see [[Output Parameters]]) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC and OCAL expressions are actually converted to opcodes and stored in postfix notation in the RPCL and ORPC fields. It is these expressions which are actually used to calculate VAL. A postfix expression can be evaluated more efficiently at run-time than an infix expression would be. When CALC or OCAL is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
In simple cases, OCAL is ignorable.  It's use will be described later, in [[Output Parameters]]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to Calcout-record expression described elsewhere in this manual.  But instead of the standard EPICS calc engine (which does not support string fields or operations), sCalcout-record expressions are handled by the sCalc engine, a separate piece of software that normally is distributed along with the sCalcout record.  The differences between these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A...L used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a valid input link is associated with this field, then it may&lt;br /&gt;
not be modified.&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Max (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Min (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;INT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;NINT('abc1.9') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-|&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete last occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.0&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;DBL('abc1.23') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TR_ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} &amp;lt;/code&amp;gt;&amp;amp;rarr;&amp;lt;code&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
:Result is  &amp;quot;abc1.23&amp;quot;.&lt;br /&gt;
:NOTE: unlike the c-language function printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
:Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.)&amp;lt;br&amp;gt;&lt;br /&gt;
:NOTE: unlike the c-language function  sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
:Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
:Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
:Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.) &lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
:Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
:Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
:Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
:Result is the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
:Result is the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
:Result is the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:it can contain the string representation of an expression which is evaluated at run-time. Thus, if necessary, the record can use the result of the CALC expression to determine if data should be written and can use the result of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WAIT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Wait for completion?&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
See the EPICS Record Reference Manual, for more on the record name (NAME) and&lt;br /&gt;
description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
* upper_alarm_limit = HIHI&lt;br /&gt;
* upper_warning_limit = HIGH&lt;br /&gt;
* lower_warning_limit = LOW&lt;br /&gt;
* lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform&lt;br /&gt;
for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by&lt;br /&gt;
the field IVOA.&lt;br /&gt;
&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;,&lt;br /&gt;
call device support to write the value of OVAL to device or PV specified by&lt;br /&gt;
the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1356</id>
		<title>RRM 3-13 String Calcout</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_String_Calcout&amp;diff=1356"/>
		<updated>2006-06-07T19:59:21Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: First cut&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= sCalcout Record =&lt;br /&gt;
&lt;br /&gt;
The String Calculation Output or &amp;quot;sCalcout&amp;quot; record is derived from the Calcout record and extends it by supporting string expressions in addition to numeric expressions.  The record has 12 string fields (AA...LL) used as input variables for the expression; calls an extended version of the EPICS calculation engine that accepts string arguments, supports a variety of string functions, and can produce string results; and its output link writes string or numeric data depending on the data type of the field to which it is linked. &lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The sCalcout record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the sCalcout record supports no direct interfaces to input hardware that might generate an interrupt, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the sCalcout record consist of 24 input links: 12 to numeric fields (INPA -&amp;gt; A, INPB -&amp;gt; B, . . . INPL -&amp;gt; L); and 12 to string fields (INAA -&amp;gt; AA, INBB -&amp;gt; BB, ...INLL -&amp;gt; LL). The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the sCalcout record contains the fields INAV, INBV, . . . INLV, which indicate the status of the links to numeric fields, and the fields IAAV, IBBV, . . . ILLV, which indicate the status of the links to string fields.  These fields indicate whether or not the specified PV was found and a link to it established. See [Operator Display Parameters] for an explanation of these fields. &lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPL&amp;lt;TD&amp;gt;Input Link L&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;TD&amp;gt;INAA&amp;lt;TD&amp;gt;Input Link AA&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBB&amp;lt;TD&amp;gt;Input Link BB&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLL&amp;lt;TD&amp;gt;Input Link LL&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the sCalcout record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  The resulting numeric value will be placed in the VAL field, and the resulting string value will be placed in the SVAL field. VAL can then be used by the OOPT field (see Section 5, Output Parameters) to determine whether or not to write to the output link or post an output event. Either VAL and SVAL can also be written to the output link. (If you elect to write an output value, the record will choose between VAL and SVAL, depending on the data type of the field at the other end of the output link.) &lt;br /&gt;
&lt;br /&gt;
The CALC expression is actually converted to opcodes and stored in postfix notation in the RPCL field. It is this expression which is actually used to calculate VAL. The postfix expression is evaluated more efficiently at run-time than an infix expression would be. When CALC is changed at run-time, the record-support routine special() will call a function to check it, and convert it to postfix. &lt;br /&gt;
&lt;br /&gt;
The record also has a second set of calculation-related fields described in [Output Parameters]. &lt;br /&gt;
&lt;br /&gt;
sCalcout-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), sCalcout-record expressions are handled by the sCalc engine,&lt;br /&gt;
a separate piece of software that normally accompanies the sCalcout record.  The differences between&lt;br /&gt;
these engines that matter for numeric expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
Expressions supported by the sCalcout record can involve operands, algebraic operators and functions, trigonometric functions, relational operators, logical operators, string operators and functions, parentheses and commas, and the conditional '?:' operator.  Numeric and string operands are supported, and&lt;br /&gt;
any operand can be used with any operator or function.  If an operand has the &amp;quot;wrong&amp;quot; type for the function or operator with which it is used, the operand will be converted implicitly to the correct type.&lt;br /&gt;
&lt;br /&gt;
Grouping of operands with parentheses is important not only to specify the order in which operations are to be performed, but also to distinguish operands from operators whose names are spelled out, such as the logical operator 'AND'. For example, the expression 'AANDB', which could have meant 'A AND B', will be (mis)interpreted by the parser as 'AA NDB'. &lt;br /&gt;
&lt;br /&gt;
==== Operands ====&lt;br /&gt;
&lt;br /&gt;
The expression can use the values retrieved from the input links as operands, though constants can be used as operands too. These values retrieved from the input links are stored in the A-L, and AA-LL fields. The values to be used in the expression are simply referenced by the field name. For example, the value obtained from the INPA link is stored in the field A, and the value obtained from INPB is stored in field B. The field names can be included in the expression which will operate on their respective values, as in A+B. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input Value L&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&amp;lt;TD&amp;gt;&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Input string LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING (40)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes/No*&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Legend: * If a valid input link is associated with this field, then it may&lt;br /&gt;
not be modified.&lt;br /&gt;
&lt;br /&gt;
There are a few special operands not associated with input fields, but&lt;br /&gt;
defined by the record (more exactly, defined by the calc engine the record uses&lt;br /&gt;
to evaluate expressions).  All but &amp;lt;code&amp;gt;RNDM&amp;lt;/code&amp;gt; are constants.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PI&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;3.141592654&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;D2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Degrees to radians (PI/180)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2D&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to degrees (1/D2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;S2R&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc seconds to radians (D2R/3600)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;R2S&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Radians to arc seconds (1/S2R)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;RNDM&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Random number between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Algebraic Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ABS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Absolute value (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ABS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SQRT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Square root (one-argument function) (SQR is deprecated)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SQRT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MIN(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Maximum (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX(A,B,C)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;CEIL&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ceiling (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;CEIL(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;FLOOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Floor (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;FLOOR(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Nearest integer (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOG&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Log base 10 (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOG(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Natural logarithm (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;LOGE&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Deprecated synonym for 'LN'&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;LOGE(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;EXP&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential function (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;EXP(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;^&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '**'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A^B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;**&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Exponential (binary) (Same as '^'.)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A**B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Addition (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A+B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Subtraction (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A-B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;*&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Multiplication (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A*B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;/&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Division (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A/B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;%&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Modulo (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A%B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;-A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NOT&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Negate (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NOT A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Max (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;gt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Min (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;?B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Trigonometric Functions ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SINH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SINH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ASIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc sine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ASIN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;COSH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;COSH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ACOS&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc cosine (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ACOS(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TANH&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Hyperbolic tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TANH(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Arc tangent (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN(A)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ATAN2&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Alternate form of arctangent (two-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ATAN2(A,B)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Relational Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Greater than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than or equal to&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Less than&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '#')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A!=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;#&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Not equal to (same as '!=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A#B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '=')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A==B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;=&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Equal to (same as '==')&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A=B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Logical Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;||&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A||B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Logical NOT&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;!A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Bitwise Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A|B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;OR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A OR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;amp;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;amp;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;AND&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise AND&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A AND B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;XOR&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Bitwise Exclusive OR&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A XOR B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;~&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;One's Complement&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;~A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Left shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;lt;&amp;amp;lt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Right shift&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;A&amp;amp;gt;&amp;amp;gt;B&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Parentheses and Comma ====&lt;br /&gt;
&lt;br /&gt;
The open and close parentheses are supported. Nested parenthesis are supported.&lt;br /&gt;
&lt;br /&gt;
The comma is supported when used to separate the arguments of a binary function.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Conditional Expression ====&lt;br /&gt;
&lt;br /&gt;
The C language's question mark operator is supported. The format is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;nbsp;&amp;amp;lt;expression&amp;amp;gt; ? &amp;amp;lt;expression-true result&amp;amp;gt; : &amp;amp;lt;expression-false  result&amp;amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== String Functions/Operators ====&lt;br /&gt;
&lt;br /&gt;
Most two-argument string functions and binary string operators are &amp;quot;overloaded&amp;quot;&lt;br /&gt;
numeric functions and operators that perform string operations only if&lt;br /&gt;
both of their arguments/operands are strings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MIN&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Minimum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') -&amp;gt; 'a'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;MAX&lt;br /&gt;
&amp;lt;td&amp;gt;Maximum lexically (two-or-more-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;MAX('a','b','c') -&amp;gt; 'c'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;INT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('1.9') -&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;INT('abc1.9') -&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;NINT&lt;br /&gt;
&amp;lt;td&amp;gt;Find first number in string; return nearest integer (one-argument&lt;br /&gt;
function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('1.9') -&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;NINT('abc1.9') -&amp;gt; 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;+&lt;br /&gt;
&amp;lt;td&amp;gt;Concatenate (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'+'b' -&amp;gt; 'ab'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' -&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;-|&lt;br /&gt;
&amp;lt;td&amp;gt;Delete first occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' -&amp;gt; 'bca'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;|-&lt;br /&gt;
&amp;lt;td&amp;gt;Delete last occurrence of substring (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abca'-'a' -&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;='b' -&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically greater than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;gt;'b' -&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than or equal (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;='b' -&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;amp;lt;&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically less than (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'&amp;amp;lt;'b' -&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;!=&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically not equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'!='b' -&amp;gt; 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;==&lt;br /&gt;
&amp;lt;td&amp;gt;Lexically equal to (binary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'a'=='b' -&amp;gt; 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;DBL&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('1') -&amp;gt; 1.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;DBL('abc1.23') -&amp;gt; 1.23&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;STR&lt;br /&gt;
&amp;lt;td&amp;gt;Convert argument to string (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;STR(1) -&amp;gt; '1.00000000'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;BYTE&lt;br /&gt;
&amp;lt;td&amp;gt;Convert first character of string argument to double (one-argument function)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;BYTE('abc') -&amp;gt; 97.0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;PRINTF&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Return string constructed from format string and string or&lt;br /&gt;
double argument (two-argument function)&amp;amp;nbsp; (NOTE: '$P' is a synonym for PRINTF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%cdeEfgGiosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators:&amp;lt;B&amp;gt; *&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;PRINTF(&amp;quot;%.2f&amp;quot;,1.23) -&amp;gt; '1.23'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;SSCANF&lt;br /&gt;
&amp;lt;td&amp;gt;Return string or double parsed from string argument according&lt;br /&gt;
to format string (two-argument function) (NOTE: '$S' is a synonym for SSCANF)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;BR&amp;gt;Allowed format indicators: &amp;lt;B&amp;gt;%*[cdeEfgGhilosuxX&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;BR&amp;gt;Disallowed indicators: &amp;lt;B&amp;gt;$npw&amp;lt;/B&amp;gt;&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;SSCANF('V=1.25', &amp;quot;%*2c%lf&amp;quot;) -&amp;gt; 1.25&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;TR_ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape sequences into the characters they represent&lt;br /&gt;
(one-argument function).   (NOTE: '$T' is a synonym for TR_ESC.)&lt;br /&gt;
&amp;lt;BR&amp;gt;TR_ESC() applies dbTranslateEscape() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;An escaped null character will terminate the result string&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;TR_ESC(&amp;quot;a\x62c&amp;quot;) -&amp;gt; 'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;ESC&lt;br /&gt;
&amp;lt;td&amp;gt;Translate escape characters into equivalent escape sequences.&lt;br /&gt;
(one-argument function) (NOTE: '$E' is a synonym for ESC)&lt;br /&gt;
&amp;lt;BR&amp;gt;ESC() applies epicsStrSnEscaped() to its argument. &lt;br /&gt;
&amp;lt;BR&amp;gt;This function is approximately the opposite of TR_ESC().&lt;br /&gt;
&amp;lt;BR&amp;gt;The first null character found in the input string terminates it.&lt;br /&gt;
If there is no null chaacter, the string is assumed to be 40&lt;br /&gt;
characters long.&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;ESC(&amp;quot;a&amp;amp;lt;return&amp;amp;gt;c&amp;quot;) -&amp;gt; 'a\rc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;[&lt;br /&gt;
&amp;lt;td&amp;gt;Substring&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'[1,3] -&amp;gt; 'bcd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'['ab','ef'] -&amp;gt; 'cd'&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;BR&amp;gt;'abcdef'[0,-1] -&amp;gt; 'abcdef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;{&lt;br /&gt;
&amp;lt;td&amp;gt;Substring substitution&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abcdef'{'cd','XX'} -&amp;gt; 'abXXef'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;&amp;quot;&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;&amp;quot;abc&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;'&lt;br /&gt;
&amp;lt;td&amp;gt;String indicator&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;'abc'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Operand-Array Operators ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;th align=center valign=top&amp;gt;Op&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Description&lt;br /&gt;
&amp;lt;th valign=top&amp;gt;Example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@&lt;br /&gt;
&amp;lt;td&amp;gt;Numeric array element.  Regard the numeric fields A-L as an array whose elements&lt;br /&gt;
are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td align=center valign=top&amp;gt;@@&lt;br /&gt;
&amp;lt;td&amp;gt;String array element.  Regard the string fields AA-LL as an array of strings whose&lt;br /&gt;
elements are numbered 0-11, and return the element whose number follows.  (unary)&lt;br /&gt;
&amp;lt;td&amp;gt;&amp;lt;code&amp;gt;@@A&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Examples ====&lt;br /&gt;
&lt;br /&gt;
===== Algebraic Examples =====&lt;br /&gt;
A + B + 10 &lt;br /&gt;
Result is A + B + 10 &lt;br /&gt;
&lt;br /&gt;
===== Relational Examples =====&lt;br /&gt;
(A + B) &amp;lt; (C + D) &lt;br /&gt;
Result is 1 if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is 0 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Question Mark Examples =====&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E:F+L+10 &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is F+L+10 if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
(A+B)&amp;lt;(C+D)?E &lt;br /&gt;
Result is E if (A+B) &amp;lt; (C+D) &lt;br /&gt;
Result is unchanged if (A+B) &amp;gt;= (C+D) &lt;br /&gt;
&lt;br /&gt;
===== Logical Examples =====&lt;br /&gt;
A&amp;amp;B &lt;br /&gt;
Causes the following to occur: &lt;br /&gt;
* Convert A to integer &lt;br /&gt;
* Convert B to integer &lt;br /&gt;
* Perform bit-wise AND of A and B &lt;br /&gt;
* Convert result to floating point &lt;br /&gt;
&lt;br /&gt;
===== String Examples =====&lt;br /&gt;
A + &amp;quot;abc&amp;quot;&lt;br /&gt;
A + &amp;quot;abc1.2&amp;quot;&lt;br /&gt;
A + AA  (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
Result is A.  The strings &amp;quot;abc&amp;quot; and &amp;quot;abc1.2&amp;quot; will be converted implicitly to the number 0. &lt;br /&gt;
&lt;br /&gt;
A + DBL(&amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
Result is A + 1.2.  Explicit conversion to a number (by DBL, INT, or NINT) is more aggressive than implicit conversion, and skips leading non-numeric characters. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abc&amp;quot; + &amp;quot;def&amp;quot; &lt;br /&gt;
Result is &amp;quot;abcdef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
PRINTF(&amp;quot;abc%1.2f&amp;quot;, A) (where A = 1.2345) &lt;br /&gt;
Result is  &amp;quot;abc1.23&amp;quot;. &lt;br /&gt;
NOTE: unlike the c-language function &lt;br /&gt;
printf(&amp;lt;format&amp;gt;,&amp;lt;arg1&amp;gt;,&amp;lt;arg2&amp;gt;,...), &lt;br /&gt;
this function accepts only one argument after the format string. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SSCANF(AA, &amp;quot;%*3c%lf&amp;quot;) (where AA = &amp;quot;abc1.2&amp;quot;) &lt;br /&gt;
Result is &amp;quot;1.20000000&amp;quot;.  (The format fragment &amp;quot;%*3c&amp;quot; directs sscanf to ignore three characters.) &lt;br /&gt;
NOTE: unlike the c-language function &lt;br /&gt;
sscanf(&amp;lt;source&amp;gt;,&amp;lt;format&amp;gt;,&amp;lt;dest1&amp;gt;,&amp;lt;dest2&amp;gt;,...), &lt;br /&gt;
this function cannot store to a variable, but only to the value stack. &lt;br /&gt;
&lt;br /&gt;
BYTE(&amp;quot;ABC&amp;quot;) &lt;br /&gt;
Result is 65, the ASCII code for &amp;quot;A&amp;quot; in decimal. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[2,4] &lt;br /&gt;
Result is &amp;quot;cde&amp;quot;.  (The first character of the string is numbered &amp;quot;0&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[-2,-1] &lt;br /&gt;
Result is &amp;quot;ef&amp;quot;.  (The last character of the string is numbered &amp;quot;-1&amp;quot;.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[&amp;quot;ab&amp;quot;,&amp;quot;ef&amp;quot;] &lt;br /&gt;
Result is &amp;quot;cd&amp;quot;.  (If the first argument is a string, it returns the index of the first character after a successful match, or the first character in the string if no match was found.  If the second argument is a string, it returns the index of the last character before a successful match, or the last character in the string if no match was found.) &lt;br /&gt;
&lt;br /&gt;
A==2 ? &amp;quot;yes&amp;quot; : &amp;quot;no&amp;quot; &lt;br /&gt;
Result is &amp;quot;yes&amp;quot; if A == 2; otherwise, result is &amp;quot;no&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;bcd&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
Result is &amp;quot;adcbef&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;{&amp;quot;zzz&amp;quot;,&amp;quot;dcb&amp;quot;} &lt;br /&gt;
Result is &amp;quot;abcdef&amp;quot;.  (If no match, then no replacement.) &lt;br /&gt;
&lt;br /&gt;
&amp;quot;abcdef&amp;quot;[1,-2][1,-2] &lt;br /&gt;
Result is &amp;quot;cd&amp;quot; &lt;br /&gt;
&lt;br /&gt;
===== Array Examples =====&lt;br /&gt;
@0 &lt;br /&gt;
Result in the value of the numeric variable A. (&amp;quot;@0&amp;quot; is just another name for A.)&lt;br /&gt;
&lt;br /&gt;
@@0 &lt;br /&gt;
Result in the value of the string variable AA.&lt;br /&gt;
&lt;br /&gt;
@(A+B) &lt;br /&gt;
Result in the value of the numeric variable whose number is given by the sum of A and B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters specify and control the output capabilities of the&lt;br /&gt;
sCalcout record. They determine when to write the output, where to write&lt;br /&gt;
it, and what the output will be. The OUT link specifies the Process Variable&lt;br /&gt;
to which the result will be written. The OOPT field determines the condition&lt;br /&gt;
that causes the output link to be written to. It's a menu field that has&lt;br /&gt;
six choices:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;lt;table border&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Every Time&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time record is processed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;On Change&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;write output every time VAL changes, i.e., every&lt;br /&gt;
time the result of the expression changes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL is&lt;br /&gt;
zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;When Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output if VAL&lt;br /&gt;
is non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output only&lt;br /&gt;
if VAL is zero and last value was non-zero.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Transition to Non-zero&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;when record is processed, write output&lt;br /&gt;
only if VAL is non-zero and last value was zero.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td valign=top&amp;gt;&lt;br /&gt;
&amp;lt;TT&amp;gt;Never&amp;lt;/TT&amp;gt;&amp;lt;td valign=top&amp;gt;Don't write output ever.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
The DOPT field determines what data is written to the output link when&lt;br /&gt;
the output is executed. The field is a menu field with two options: &amp;lt;TT&amp;gt;Use&lt;br /&gt;
CALC&amp;lt;/TT&amp;gt; or &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt;. If &amp;lt;TT&amp;gt;Use CALC&amp;lt;/TT&amp;gt; is specified, when&lt;br /&gt;
the record writes its output it will write the result of the expression&lt;br /&gt;
in the CALC record, that is, it will write the value of the VAL [SVAL]&lt;br /&gt;
field to a double [string] destination. If &amp;lt;TT&amp;gt;Use OCAL&amp;lt;/TT&amp;gt; is specified,&lt;br /&gt;
the record will instead write the result of the expression in the OCAL&lt;br /&gt;
field, which is contained in the OVAL field (string result in the OSV)&lt;br /&gt;
field. The OCAL field is exactly like the CALC field and has the same functionality:&lt;br /&gt;
it can contain the string representation of an expression which is evaluated&lt;br /&gt;
at run-time. Thus, if necessary, the record can use the result of the CALC&lt;br /&gt;
expression to determine if data should be written and can use the result&lt;br /&gt;
of the OCAL expression as the data to write.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;If the OEVT field specifies a non-zero integer and the condition&lt;br /&gt;
in the OOPT field is met, the record will post a corresponding event. If&lt;br /&gt;
the ODLY field is non-zero, the record pauses for the specified number&lt;br /&gt;
of seconds before executing the OUT link or posting the output event. During&lt;br /&gt;
this waiting period the record is &amp;quot;active&amp;quot; and will not be processed again&lt;br /&gt;
until the wait is over. The field DLYA is equal to 1 during the delay period.&lt;br /&gt;
The resolution of the delay entry is 1/60 of a second (it uses the VxWorks&lt;br /&gt;
&amp;lt;TT&amp;gt;tickLib&amp;lt;/TT&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;The IVOA field specifies what action to take with the OUT link&lt;br /&gt;
if the sCalcout record enters an INVALID alarm status. The options are&lt;br /&gt;
&amp;lt;TT&amp;gt;Continue normally&amp;lt;/TT&amp;gt;, &amp;lt;TT&amp;gt;Don't drive outputs&amp;lt;/TT&amp;gt;, and &amp;lt;TT&amp;gt;Set output&lt;br /&gt;
to IVOV&amp;lt;/TT&amp;gt;. If the IVOA field is &amp;lt;TT&amp;gt;Set output to IVOV&amp;lt;/TT&amp;gt;, the data&lt;br /&gt;
entered into the IVOV field is written to the OUT link if the record alarm&lt;br /&gt;
severity is INVALID.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Specification&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTLINK&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execute Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOPT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Data Option&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Calculation&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[36]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OVAL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OEVT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Event To Issue&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ODLY&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Execution Delay&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Action&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IVOA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Invalid Output Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output string value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;WAIT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Wait for completion?&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;quot;NoWait&amp;quot;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt; The sCalcout record now uses device support to write to the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link. Soft device supplied with the record is selected with&lt;br /&gt;
the .dbd specification &amp;lt;pre&amp;gt; field(DTYP,&amp;quot;Soft Channel&amp;quot;) &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This device support uses the record's &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; field to determine&lt;br /&gt;
whether to wait for completion of processing initiated by the &amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt;&lt;br /&gt;
link before causing the record to execute its forward link.  The mechanism by&lt;br /&gt;
which this waiting for completion is performed requires that the&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; link have the attribute &amp;lt;code&amp;gt;CA&amp;lt;/code&amp;gt; -- i.e., the link text&lt;br /&gt;
looks something like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;  xxx:record.field &amp;lt;b&amp;gt;CA&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Currently, the record does not try to ensure that &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; and&lt;br /&gt;
&amp;lt;code&amp;gt;OUT&amp;lt;/code&amp;gt; are compatibly configured.  If &amp;lt;code&amp;gt;WAIT&amp;lt;/code&amp;gt; == &amp;quot;Wait&amp;quot;,&lt;br /&gt;
but the link looks like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt; xxx:record.field &amp;lt;b&amp;gt;PP&amp;lt;/b&amp;gt; NMS&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;for example, then the record will not wait for completion before executing&lt;br /&gt;
its forward link.&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator.&lt;br /&gt;
Some are also meant to represent the status of the record at run-time.&lt;br /&gt;
An example of an interactive MEDM display screen that displays the status&lt;br /&gt;
of the sCalcout record is located here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The EGU field contains a string of up to 16 characters which is&lt;br /&gt;
supplied by the user and which describes the values being operated upon.&lt;br /&gt;
The string is retrieved whenever the routine &amp;lt;TT&amp;gt;get_units&amp;lt;/TT&amp;gt; is called.&lt;br /&gt;
The EGU string is solely for an operator's sake and does not have to be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The HOPR and LOPR fields only refer to the limits of the VAL,&lt;br /&gt;
HIHI, HIGH, LOW, and LOLO fields. PREC controls the precision of the VAL&lt;br /&gt;
field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The INAV-INLV and IAAV-ILLV fields indicate the status of the&lt;br /&gt;
link to the PVs specified in the INPA-INPL and INAA-INLL fields, respectively.&lt;br /&gt;
The fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;table border&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV NC&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link hasn't&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Ext PV OK&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV wasn't found on this IOC and a Channel Access link has&lt;br /&gt;
been established.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Local PV&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the PV was found on this IOC.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;Constant&lt;br /&gt;
&amp;lt;td valign=top&amp;gt;the corresponding link field is a constant.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The OUTV field indicates the status of the OUT link. It has the same possible&lt;br /&gt;
values as the INAV-INLV fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The CLCV and OLCV fields indicate the validity of the expression&lt;br /&gt;
in the CALC and OCAL fields, respectively. If the expression is invalid,&lt;br /&gt;
the field is set to one.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;The DLYA field is set to one during the delay interval specified&lt;br /&gt;
in ODLY.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;See the EPICS Record Reference Manual, for more on the record name (NAME) and&lt;br /&gt;
description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Engineering Units&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [16]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Display Precision&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;SHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOPR&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Operating Range&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INPL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUT PV Status&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CLCV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CALC Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OCAL Valid&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LONG&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DLYA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Output Delay Active&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;USHORT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Record Name&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Description&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING [29]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Null&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAAV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBBV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ILLV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Link Status of INLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;1&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
&lt;br /&gt;
The possible alarm conditions for the sCalcout record are the SCAN,&lt;br /&gt;
READ, Calculation, and limit alarms. The SCAN and READ alarms are called&lt;br /&gt;
by the record support routines. The Calculation alarm is called by the&lt;br /&gt;
record processing routine when the CALC expression is an invalid one, upon&lt;br /&gt;
which an error message is generated.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;The following alarm parameters which are configured by the user&lt;br /&gt;
define the limit alarms for the VAL field and the severity corresponding&lt;br /&gt;
to those conditions.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;The HYST field defines an alarm deadband for each limit. See the&lt;br /&gt;
EPICS Record Reference Manual for a complete explanation of alarms&lt;br /&gt;
and these fields. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIHI&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Hihi Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HIGH&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;High Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOW&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Low Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LOLO&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Lolo Alarm Limit&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;FLOAT&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HHSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Hihi Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a High Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Low Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLSV&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Severity for a Lolo Alarm&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Menu&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;HYST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Alarm Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Monitor Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to determine when to send monitors for the&lt;br /&gt;
value fields. The monitors are sent when the value field exceeds the last&lt;br /&gt;
monitored field by the appropriate deadband, the ADEL for archiver monitors&lt;br /&gt;
and the MDEL field for all other types of monitors. If these fields have&lt;br /&gt;
a value of zero, every time the value changes, monitors are triggered;&lt;br /&gt;
if they have a value of -1, every time the record is scanned, monitors&lt;br /&gt;
are triggered.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER &amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ADEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MDEL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor, i.e. value change, Deadband&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Run-time Parameters ===&lt;br /&gt;
&lt;br /&gt;
These fields are not configurable using a configuration tool and none&lt;br /&gt;
are modifiable at run-time. They are used to process the record.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;The LALM field is used to implement the hysteresis factor for&lt;br /&gt;
the alarm limits.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;The LA-LL fields are used to decide when to trigger monitors for&lt;br /&gt;
the corresponding fields. For instance, if LA does not equal the value&lt;br /&gt;
for A, monitors for A are triggered. The MLST and MLST fields are used&lt;br /&gt;
in the same manner for the VAL field.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&lt;br /&gt;
&amp;lt;TABLE BORDER&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Summary&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Type&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;DCT&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Initial&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Access&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Modify&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;PP&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LALM&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Last Alarmed Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;ALST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Archive Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;MLST&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Monitor Last Value&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for B&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for A&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DOUBLE&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt; &amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LAA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for AA&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LBB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for BB&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;LLL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Previous Input Value for LL&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;STRING[40]&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;0&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Yes&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;No&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# Call sCalcPerform(), which evaluates the expression specified in CALC and stores the result in VAL.  If sCalcPerform() returns success, UDF is set to FALSE.&lt;br /&gt;
#Check alarms. This routine checks to see if the new VAL causes the alarm&lt;br /&gt;
status and severity to change. If so, NSEV, NSTA and LALM are set. It also&lt;br /&gt;
honors the alarm hysteresis factor (HYST). Thus the value must change by&lt;br /&gt;
at least HYST before the alarm status and severity changes.&lt;br /&gt;
# Determine if the Output Execution Option (OOPT) is met. If it is met,&lt;br /&gt;
either execute the output link (and output event) immediately (if ODLY&lt;br /&gt;
= 0), or schedule a callback to do so after the specified interval. See the&lt;br /&gt;
explanation for the &amp;lt;TT&amp;gt;execOutput()&amp;lt;/TT&amp;gt; routine below.&lt;br /&gt;
# Determine what fields should be posted, and with what attributes.&lt;br /&gt;
## Post all fields the record has changed.&lt;br /&gt;
## Alarm monitors are invoked if the alarm status or severity has changed.&lt;br /&gt;
## Archive and value change monitors are invoked if ADEL and MDEL conditions&lt;br /&gt;
are met.&lt;br /&gt;
## NSEV and NSTA are reset to 0&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-L, CALC, OCAL, INPA-INPL, INAA-INLL, or OUT are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
Retrieves EGU.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper display and lower display limits for a field. If the field&lt;br /&gt;
is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and LOPR,&lt;br /&gt;
else if the field has upper and lower limits defined they will be used,&lt;br /&gt;
else the upper and lower maximum values for the field type will be used.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the upper control and the lower control limits for a field. If the&lt;br /&gt;
field is VAL, HIHI, HIGH, LOW, or LOLO, the limits are set to HOPR and&lt;br /&gt;
LOPR, else if the field has upper and lower limits defined they will be&lt;br /&gt;
used, else the upper and lower maximum values for the field type will be&lt;br /&gt;
used.&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
Sets the following values:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;upper_alarm_limit = HIHI&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;upper_warning_limit = HIGH&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;lower_warning_limit = LOW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;&amp;amp;nbsp;lower_alarm_limit = LOLO&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine sCalcPerform&lt;br /&gt;
for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by&lt;br /&gt;
the field IVOA.&lt;br /&gt;
&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;quot;Continue Normally&amp;quot;,&lt;br /&gt;
call device support to write the value of OVAL to device or PV specified by&lt;br /&gt;
the OUT link, and post the event in OEVT (if non-zero).&lt;br /&gt;
&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The sCalcout record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13&amp;diff=1732</id>
		<title>RRM 3-13</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13&amp;diff=1732"/>
		<updated>2006-06-07T19:56:56Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: Added sCalcout record&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;H2 style=&amp;quot;color:#C00000&amp;quot;&amp;gt;Help Needed!&amp;lt;/H2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This documentation needs revising, as the software has been updated significantly since the docs were written.  The [[RRM 3-13 Editing Tasks|Editing Tasks]] page gives some ideas on what needs doing to bring it up to the R3.13.10 implementation.  However, '''please''' do ''not'' update any of these pages to cover the 3.14 releases of EPICS; we'll put up a separate manual for that version after the R3.13.10 documentation is up to scratch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EPICS 3.13 Record Reference Manual ==&lt;br /&gt;
&lt;br /&gt;
Philip Stanley, Janet Anderson, Marty Kraimer&lt;br /&gt;
&lt;br /&gt;
Wikified by Andrew Johnson&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Copyright|Copyright]]&lt;br /&gt;
* [[RRM 3-13 Preface|Preface]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Concepts|Database Concepts]]&lt;br /&gt;
* [[RRM 3-13 dbCommon|Fields Common to All Record Types]]&lt;br /&gt;
* [[RRM 3-13 Common|Fields Common to Many Record Types]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Analog Input|ai - Analog Input]]&lt;br /&gt;
* [[RRM 3-13 Analog Output|ao - Analog Output]]&lt;br /&gt;
* [[RRM 3-13 Archive|archive - Archive]]&lt;br /&gt;
* [[RRM 3-13 Binary Input|bi - Binary Input]]&lt;br /&gt;
* [[RRM 3-13 Binary Output|bo - Binary Output]]&lt;br /&gt;
* [[RRM 3-13 Calculation|calc - Calculation]]&lt;br /&gt;
* [[RRM 3-13 Calcout|calcout - Calculation Output]]&lt;br /&gt;
* [[RRM 3-13 Compression|compress - Compression]]&lt;br /&gt;
* [[RRM 3-13 CPID Control|cpid - CPID Control]]&lt;br /&gt;
* [[RRM 3-13 Data Fanout|dfanout - Data Fanout]]&lt;br /&gt;
* [[RRM 3-13 Event|event - Event]]&lt;br /&gt;
* [[RRM 3-13 Fanout|fanout - Fanout]]&lt;br /&gt;
* [[RRM 3-13 Histogram|histogram - Histogram]]&lt;br /&gt;
* [[RRM 3-13 Long Input|longin - Long Input]]&lt;br /&gt;
* [[RRM 3-13 Long Output|longout - Long Output]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Input|mbbi - Multi-Bit Binary Input]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Input Direct|mbbiDirect - Multi-Bit Binary Input Direct]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Output|mbbo - Multi-Bit Binary Output]]&lt;br /&gt;
* [[RRM 3-13 Multi-Bit Binary Output Direct|mbboDirect - Multi-Bit Binary Output Direct]]&lt;br /&gt;
* [[RRM 3-13 Permissive|permissive - Permissive]]&lt;br /&gt;
* [[RRM 3-13 PID Control|pid - PID Control]]&lt;br /&gt;
* [[RRM 3-13 Pulse Counter|pulseCounter - Pulse Counter]]&lt;br /&gt;
* [[RRM 3-13 Pulse Delay|pulseDelay - Pulse Delay]]&lt;br /&gt;
* [[RRM 3-13 Pulse Train|pulseTrain - Pulse Train]]&lt;br /&gt;
* [[RRM 3-13 String Calcout|sCalcout - String Calculation and Output]]&lt;br /&gt;
* [[RRM 3-13 Scan|scan - Scan]]&lt;br /&gt;
* [[RRM 3-13 Select|sel - Select]]&lt;br /&gt;
* [[RRM 3-13 Sequence|seq - Sequence]]&lt;br /&gt;
* [[RRM 3-13 State|state - State]]&lt;br /&gt;
* [[RRM 3-13 Stepper Motor|steppermotor - Stepper Motor]]&lt;br /&gt;
* [[RRM 3-13 String Input|stringin - String Input]]&lt;br /&gt;
* [[RRM 3-13 String Output|stringout - String Output]]&lt;br /&gt;
* [[RRM 3-13 SubArray|subArray - Sub-Array]]&lt;br /&gt;
* [[RRM 3-13 Subroutine|sub - Subroutine]]&lt;br /&gt;
* [[RRM 3-13 Timer|timer - Timer]]&lt;br /&gt;
* [[RRM 3-13 Transform|transform - Transform]]&lt;br /&gt;
* [[RRM 3-13 Wait|wait - Wait]]&lt;br /&gt;
* [[RRM 3-13 Waveform|waveform - Waveform]]&lt;br /&gt;
&lt;br /&gt;
* [[RRM 3-13 Menu Choices|Appendix: Menu Choices]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 19 MAY 1998&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1366</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1366"/>
		<updated>2006-06-07T18:31:32Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: Replaced link to 3.14 distribution with link to 3.13. distribution&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; does not specify a PV name, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; will be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  An EPICS 3.13-compatible version of this record is available as part of the [http://www.aps.anl.gov/aod/bcda/synApps/std/std.html std] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1354</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1354"/>
		<updated>2006-06-07T18:20:01Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: Added link to the distribution web page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; does not specify a PV name, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; will be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Availability ==&lt;br /&gt;
&lt;br /&gt;
The Transform record is not included with EPICS base.  It is available&lt;br /&gt;
as part of the [http://www.aps.anl.gov/aod/bcda/synApps/calc/calc.html calc] module, which is part of the [http://www.aps.anl.gov/aod/bcda/synApps synApps] package of EPICS-based synchrotron-beamline software.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1353</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1353"/>
		<updated>2006-06-07T17:39:21Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: Added Background information&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
     CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Background ==&lt;br /&gt;
The Transform record was originally intended to perform the sequences of conditional calculations required to implement bidirectional coordinate transformations. &lt;br /&gt;
&lt;br /&gt;
Example: You have defined two records containing values we'll call &amp;quot;L&amp;quot; and &amp;quot;R&amp;quot; (the left and right edges of a slit, say). Sometimes the user wants to control L and R individually, and sometimes he wants to control a combination of L and R--say (L-R) and (L+R)/2, the width and center of the slit system. You can implement a bidirectional coordinate transformation with the following expressions (where position values are assumed to increase as we go from left to right): &lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border = &amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;th&amp;gt;field&amp;lt;th&amp;gt;expression&amp;lt;th&amp;gt;comment  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;A  &amp;lt;td&amp;gt;C-D/2  &amp;lt;td&amp;gt;position of left edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;B  &amp;lt;td&amp;gt;C+D/2  &amp;lt;td&amp;gt;position of right edge of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;C  &amp;lt;td&amp;gt;(A+B)/2  &amp;lt;td&amp;gt;position of center of slit  &lt;br /&gt;
&amp;lt;tr&amp;gt; &amp;lt;td&amp;gt;D  &amp;lt;td&amp;gt;B-A  &amp;lt;td&amp;gt;width of slit  &lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, if a user command moves the left side of the slit (A changes) and causes the record to process, A will not be recalculated because it's value is new, the right side of the slit will remain still (B is unnecessarily recalculated from old values of C and D), the position of the slit center (C) will change as expected, and the slit width (D) will change as expected. Thus, all four fields will contain consistent information about the two degrees of freedom controlled by the record, and effectively we have two actual devices and two virtual devices. &lt;br /&gt;
&lt;br /&gt;
We don't care which two fields (out of A..D) correspond to actual motion-control devices, and two channel-access clients that make different assumptions about how a slit should be implemented can control this slit without modification. With an additional, similar transform record driven from the readback fields of the actual motion-control devices, we can calculate readback values for the virtual devices as well. &lt;br /&gt;
&lt;br /&gt;
We could have accomplished nearly the same effect with six CALC records and some FANOUTs, but two of the drive fields (A,B,C,D) would always be inconsistent with their readbacks. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; does not specify a PV name, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; will be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1352</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1352"/>
		<updated>2006-06-07T17:22:02Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: First reasonably complete version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
     INPA - link from which value for A will be read&lt;br /&gt;
     IAV  - status of INPA&lt;br /&gt;
     A    - value&lt;br /&gt;
     CLCA - expression whose value might be written to A&lt;br /&gt;
     CAV  - validity of expression CLCA&lt;br /&gt;
     OUTA - link to which A will be written&lt;br /&gt;
     OAV  - status of OUTA&lt;br /&gt;
	 CMTA - comment (description)&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
An expression is evaluated only if the associated value field has not been modified (either by a &amp;lt;i&amp;gt;put&amp;lt;/i&amp;gt; from&lt;br /&gt;
some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; does not specify a PV name, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; will be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt; and stores the result in &amp;lt;b&amp;gt;x&amp;lt;/b&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
	<entry>
		<id>https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1351</id>
		<title>RRM 3-13 Transform</title>
		<link rel="alternate" type="text/html" href="https://wiki-ext.aps.anl.gov/epics/index.php?title=RRM_3-13_Transform&amp;diff=1351"/>
		<updated>2006-06-07T16:50:44Z</updated>

		<summary type="html">&lt;p&gt;TimMooney: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Transform Record =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Transform record combines features of the Calcout and Seq records, with&lt;br /&gt;
16 sets of the following fields:&lt;br /&gt;
&lt;br /&gt;
* input link&lt;br /&gt;
* input-link status&lt;br /&gt;
* value (from input link or from calc expression)&lt;br /&gt;
* calc expression&lt;br /&gt;
* calc-expression status&lt;br /&gt;
* output link&lt;br /&gt;
* output-link status&lt;br /&gt;
* comment&lt;br /&gt;
&lt;br /&gt;
For concreteness, here is the first set of fields:&lt;br /&gt;
&lt;br /&gt;
* INPA - link from which value for A will be read&lt;br /&gt;
* IAV - status of INPA&lt;br /&gt;
* A - value&lt;br /&gt;
* CLCA - expression whose value might be written to A&lt;br /&gt;
* CAV - validity of expression CLCA&lt;br /&gt;
* OUTA - link to which A will be written&lt;br /&gt;
* OAV - status of OUTA&lt;br /&gt;
&lt;br /&gt;
The value fields A-P are &amp;quot;process-passive&amp;quot;, which means that writing to one of them from&lt;br /&gt;
a CA client, or via a &amp;quot;CA&amp;quot; link, will cause the record to process, if its scan state is &amp;quot;Passive&amp;quot;.&lt;br /&gt;
If the input link associated with a value field is not blank and is not an initialization constant, then&lt;br /&gt;
writes to that value field are not permitted.&lt;br /&gt;
&lt;br /&gt;
Expressions are evaluated only if the associated value fields have not been modified (either by&lt;br /&gt;
a Put from some external agent, or as the result of input-link execution) since the last time the record processed.&lt;br /&gt;
&lt;br /&gt;
== Parameter Fields ==&lt;br /&gt;
&lt;br /&gt;
The fields in this record fall into these categories:&lt;br /&gt;
&lt;br /&gt;
* scan parameters&lt;br /&gt;
* read parameters&lt;br /&gt;
* expression parameters&lt;br /&gt;
* output parameters&lt;br /&gt;
* operator display parameters&lt;br /&gt;
* alarm parameters&lt;br /&gt;
&lt;br /&gt;
=== Scan Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has the standard fields for specifying under what circumstances the record will be processed. These fields are listed in [[RRM 3-13 dbCommon#Scan Fields|Scan Fields]]. In addition, [[RRM 3-13 Concepts#Scanning Specification|Scanning Specification]] explains how these fields are used. Since the Transform record supports no direct interfaces to hardware, it cannot be scanned on I/O interrupt, so its SCAN field cannot be &amp;lt;CODE&amp;gt;I/O Intr&amp;lt;/CODE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Read Parameters ===&lt;br /&gt;
&lt;br /&gt;
The read parameters for the Transform record consist of 16 input links INPA, INPB, ... INPP. The fields can be database links, channel access links, or constants. If they are links, they must specify another record's field. If they are constants, associated value fields will be initialized with the constants. These fields cannot be hardware addresses. In addition, the Transform record contains the IAV, IBV, . . . IPV fields which indicate the states of the link fields, for example, whether or not the specified PV was found and a link to it established. See [[#Operator Display Parameters|Operator Display Parameters]] for an explanation of these fields.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 Concepts#Address Specification|Address Specification]] for information on how to specify database links.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPA&amp;lt;TD&amp;gt;Input Link A&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPB&amp;lt;TD&amp;gt;Input Link B&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;INPP&amp;lt;TD&amp;gt;Input Link P&amp;lt;TD&amp;gt;INLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;N/A&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Expression Parameters ===&lt;br /&gt;
&lt;br /&gt;
Like the Calcout record, the Transform record has fields in which the developer or user can enter an infix&lt;br /&gt;
expression to be evaluated when the record is processed.  There are, in fact, 16 such fields, each of which&lt;br /&gt;
is a member of its own (&amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt;, &amp;lt;i&amp;gt;outputlink&amp;lt;/i&amp;gt;) group.  For&lt;br /&gt;
each group, if &amp;lt;i&amp;gt;inputlink&amp;lt;/i&amp;gt; does not specify a PV name, then &amp;lt;i&amp;gt;expression&amp;lt;/i&amp;gt; will be evaluated when&lt;br /&gt;
the record processes, and the result will be placed in &amp;lt;i&amp;gt;value&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Transform-record expressions are very similar to Calcout-record expression described elsewhere in this&lt;br /&gt;
manual.  Instead of the standard EPICS calc engine (which does not permit an expression&lt;br /&gt;
to reference more than 12 input fields), Transform-record expressions are handled by the sCalcout (string calculation and output) record's engine.  The differences, between these engines, that matter for&lt;br /&gt;
transform-record expressions are the following:&lt;br /&gt;
&lt;br /&gt;
* The constants PI (3.14159...), D2R (PI/180), R2D (180/PI), S2R (D2R/360), and R2S (1/S2R) are supported&lt;br /&gt;
* The functions MIN() and MAX() may have more than two arguments.&lt;br /&gt;
* The function NINT() (nearest integer) is supported.&lt;br /&gt;
* The function LN() (log base e) is a permitted alternative to LOGE()&lt;br /&gt;
* The function ATAN2() (alternative form of the arctangent function) is supported&lt;br /&gt;
* The binary operators '&amp;gt;&amp;amp;' (larger of the operands) and '&amp;lt;&amp;amp;' (smaller) are supported&lt;br /&gt;
* The binary operators '==' (equal) and '!=' (not equal) are permitted alternatives to '=' and '#', respectively.&lt;br /&gt;
* The unary operator '@' selects an input field by number.  (E.g., '@0' means 'A'.  If 'B' has the value 3, '@b' means 'D'.)&lt;br /&gt;
* The values of the variables A..P used in expressions may be the results of previously evaluated expressions.&lt;br /&gt;
&lt;br /&gt;
=== Output Parameters ===&lt;br /&gt;
&lt;br /&gt;
The Transform record has 16 output links, executed in order from OUTA to OUTP.  Unlike the Calcout record,&lt;br /&gt;
these links are not conditional; they execute every time the record processes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTA&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTB&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OUTP&amp;lt;TD&amp;gt;Output Specification&amp;lt;TD&amp;gt;OUTLINK&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;N/A&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operator Display Parameters ===&lt;br /&gt;
&lt;br /&gt;
These parameters are used to present meaningful data to the operator. Some are also meant to represent the status of the record at run-time. An example of an interactive MEDM display screen that displays the status of the Transform record is located here.&lt;br /&gt;
&lt;br /&gt;
The EGU field contains a string of up to 16 characters which is supplied by the user and which describes the values being operated upon. The string is retrieved whenever the routine &amp;lt;CODE&amp;gt;get_units&amp;lt;/CODE&amp;gt; is called. The EGU string is solely for an operator's sake and does not have to be used.  This field is pretty much useless for the Transform record, because it's unlikely to pertain to all value fields.&lt;br /&gt;
&lt;br /&gt;
The IAV-IPV fields indicate the states of the links INPA-INPP. These fields can have three possible values:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV NC&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link hasn't been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Ext PV OK&amp;lt;/CODE&amp;gt; -- the PV wasn't found on this IOC and a Channel Access link has been established.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Local PV&amp;lt;/CODE&amp;gt; -- the PV was found on this IOC.&lt;br /&gt;
* &amp;lt;CODE&amp;gt;Constant&amp;lt;/CODE&amp;gt; -- the corresponding link field is a constant.&lt;br /&gt;
&lt;br /&gt;
The OAV-OPV fields indicate the states of the OUTA-OUTP links. They has the same possible values as the IAV-ILV fields.&lt;br /&gt;
&lt;br /&gt;
The CAV-CPV fields indicate the validity of the expressions in the CLCA-CLCP fields, respectively. If an expression is invalid, its status field is set to one.&lt;br /&gt;
&lt;br /&gt;
The IVLA field specifies how the record should behave if any of its input links references a record that is in alarm.  There are two possibilities:&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;Ignore Error&amp;quot; - Use whatever value was gotten from the link, and proceed as if there had not been any error indication.&lt;br /&gt;
* &amp;quot;Do Nothing&amp;quot; - Stop after all input values have been retrieved: do not evaluate expressions, and do not execute output or forward links.&lt;br /&gt;
&lt;br /&gt;
See [[RRM 3-13 dbCommon#Fields Common to All Record Types|Fields Common to All Record Types]] for more on the record name (NAME) and description (DESC) fields.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Field&amp;lt;TH&amp;gt;Summary&amp;lt;TH&amp;gt;Type&amp;lt;TH&amp;gt;DCT&amp;lt;TH&amp;gt;Initial&amp;lt;TH&amp;gt;Access&amp;lt;TH&amp;gt;Modify&amp;lt;TH&amp;gt;Rec Proc Monitor&amp;lt;TH&amp;gt;PP&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;EGU&amp;lt;TD&amp;gt;Engineering Units&amp;lt;TD&amp;gt;STRING [16]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;PREC&amp;lt;TD&amp;gt;Display Precision&amp;lt;TD&amp;gt;SHORT&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IAV&amp;lt;TD&amp;gt;Link Status of INPA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IBV&amp;lt;TD&amp;gt;Link Status of INPB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;IPV&amp;lt;TD&amp;gt;Link Status of INPP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;1&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OAV&amp;lt;TD&amp;gt;Link Status of OUTA&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OBV&amp;lt;TD&amp;gt;Link Status of OUTB&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;OPV&amp;lt;TD&amp;gt;Link Status of OUTP&amp;lt;TD&amp;gt;RECCHOICE&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CAV&amp;lt;TD&amp;gt;CLCA Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CBV&amp;lt;TD&amp;gt;CLCB Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TD&amp;gt;...&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;CPV&amp;lt;TD&amp;gt;CLCP Valid&amp;lt;TD&amp;gt;LONG&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;NAME&amp;lt;TD&amp;gt;Record Name&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;0&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;DESC&amp;lt;TD&amp;gt;Description&amp;lt;TD&amp;gt;STRING [29]&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Null&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;Yes&amp;lt;TD&amp;gt;No&amp;lt;TD&amp;gt;No&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Alarm Parameters ===&lt;br /&gt;
The Transform record has no record-type-specific alarm fields.&lt;br /&gt;
See [[RRM 3-13 dbCommon#Alarm Fields|Alarm Fields]] for the list of alarm fields common to all record types.&lt;br /&gt;
&lt;br /&gt;
== Record Support ==&lt;br /&gt;
&lt;br /&gt;
=== Record Support Routines ===&lt;br /&gt;
&lt;br /&gt;
==== init_record ====&lt;br /&gt;
&lt;br /&gt;
For each constant input link, the corresponding value field is initialized with the constant value if the input link is CONSTANT or a channel access link is created if the input link is PV_LINK.&lt;br /&gt;
&lt;br /&gt;
A routine sCalcPostfix is called to convert the infix expression in CLCA-CLCV to postfix notation. The results are stored in RPCA-RPCP.&lt;br /&gt;
&lt;br /&gt;
==== process ====&lt;br /&gt;
&lt;br /&gt;
See next section.&lt;br /&gt;
&lt;br /&gt;
==== special ====&lt;br /&gt;
&lt;br /&gt;
This is called if any of the fields A-P, CLCA-CLCP, INPA-INPP, OUTA-OUTP are changed.&lt;br /&gt;
For expressions fields, special() calls sCalcPostfix.  For value fields, special() keeps track of which fields have changed, because expressions will not be evaluated for fields that have been written to.  For link fields, special() starts the process of checking link status.&lt;br /&gt;
&lt;br /&gt;
==== get_value ====&lt;br /&gt;
&lt;br /&gt;
No routine&lt;br /&gt;
&lt;br /&gt;
==== get_units ====&lt;br /&gt;
&lt;br /&gt;
No routine&lt;br /&gt;
&lt;br /&gt;
==== get_precision ====&lt;br /&gt;
&lt;br /&gt;
Retrieves PREC.&lt;br /&gt;
&lt;br /&gt;
==== get_graphic_double ====&lt;br /&gt;
&lt;br /&gt;
No routine&lt;br /&gt;
&lt;br /&gt;
==== get_control_double ====&lt;br /&gt;
&lt;br /&gt;
No routine&lt;br /&gt;
&lt;br /&gt;
==== get_alarm_double ====&lt;br /&gt;
&lt;br /&gt;
No routine&lt;br /&gt;
&lt;br /&gt;
=== Record Processing ===&lt;br /&gt;
&lt;br /&gt;
==== process() ====&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;CODE&amp;gt;process()&amp;lt;/CODE&amp;gt; routine implements the following algorithm:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Fetch values from all valid input links.&lt;br /&gt;
# For each value field &amp;lt;x&amp;gt;, in order from A to P: if the value has not been written to since the last time the record processed, call sCalcPerform(), which evaluates the expression specified in CLC&amp;lt;x&amp;gt; and stores the result in &amp;lt;x&amp;gt;.&lt;br /&gt;
# Post all fields the record has changed.&lt;br /&gt;
# Execute all valid output links, in order from OUTA to OUTP.&lt;br /&gt;
# Execute the forward link, set PACT FALSE, and return.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== execOutput() ====&lt;br /&gt;
&lt;br /&gt;
# If DOPT field specifies the use of OCAL, call the routine calcPerform for the postfix version of the expression in OCAL. Otherwise, use VAL.&lt;br /&gt;
# If the Alarm Severity is INVALID, follow the option as designated by the field IVOA.&lt;br /&gt;
# If the Alarm Severity is not INVALID or IVOA specifies &amp;amp;quot;Continue Normally&amp;amp;quot;, put the value of OVAL to the OUT link and post the event in OEVT (if non-zero).&lt;br /&gt;
# If an output delay was implemented, process the forward link.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
EPICS Record Reference Manual - 7 JUNE 2006&lt;/div&gt;</summary>
		<author><name>TimMooney</name></author>
	</entry>
</feed>