update default tip
authorHeinz Junkes <junkes@fhi-berlin.mpg.de>
Mon, 09 Jul 2018 13:36:24 +0200
changeset 4 f7598b2df637
parent 3 ec018606c207
update
bin/linux-arm/kstm
configure/O.linux-arm/Makefile
configure/RELEASE
db/2Kstm.db
db/4kStmEuro.sub
db/M1900.db
db/M1900.proto
db/PhotonSTM.db
db/adcPi.db
db/dht.db
db/dualgauge.proto
db/dualgauge.sub
db/dualgauge.template
db/eurotherm2k.proto
db/eurotherm2k.template
db/misc.db
db/mtm.db
db/mtm.proto
db/pgc2.db
db/pgc2.proto
dbd/kstm.dbd
iocBoot/iockstm/st.cmd
kstmApp/Db/Makefile
kstmApp/Db/dualgauge.proto
kstmApp/Db/dualgauge.sub
kstmApp/Db/dualgauge.template
kstmApp/src/Makefile
kstmApp/src/O.Common/kstm.dbd
kstmApp/src/O.linux-arm/Makefile
kstmApp/src/O.linux-arm/aSubReadDHT.d
kstmApp/src/O.linux-arm/aSubReadDHT.o
kstmApp/src/O.linux-arm/common_dht_read.d
kstmApp/src/O.linux-arm/common_dht_read.o
kstmApp/src/O.linux-arm/devAdcPi.d
kstmApp/src/O.linux-arm/devAdcPi.o
kstmApp/src/O.linux-arm/drvAdcPi.d
kstmApp/src/O.linux-arm/drvAdcPi.o
kstmApp/src/O.linux-arm/kstm
kstmApp/src/O.linux-arm/kstm.dbd.d
kstmApp/src/O.linux-arm/kstmMain.d
kstmApp/src/O.linux-arm/kstmMain.o
kstmApp/src/O.linux-arm/kstm_registerRecordDeviceDriver.cpp
kstmApp/src/O.linux-arm/kstm_registerRecordDeviceDriver.d
kstmApp/src/O.linux-arm/kstm_registerRecordDeviceDriver.o
kstmApp/src/O.linux-arm/pi_2_dht_read.d
kstmApp/src/O.linux-arm/pi_2_dht_read.o
kstmApp/src/O.linux-arm/pi_2_mmio.d
kstmApp/src/O.linux-arm/pi_2_mmio.o
Binary file bin/linux-arm/kstm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/configure/O.linux-arm/Makefile	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,10 @@
+#This Makefile created by makeMakefile.pl
+
+
+all :
+	$(MAKE) -f ../Makefile TOP=../.. T_A=linux-arm  $@
+
+.DEFAULT: force
+	$(MAKE) -f ../Makefile TOP=../.. T_A=linux-arm  $@
+
+force:  ;
--- a/configure/RELEASE	Mon Jun 27 18:08:05 2016 +0200
+++ b/configure/RELEASE	Mon Jul 09 13:36:24 2018 +0200
@@ -30,6 +30,7 @@
 ASYN=$(SUPPORT)/asyn4-26
 STREAM=$(SUPPORT)/stream
 EUROTHERM2K=$(SUPPORT)/eurotherm2k-1-18
+CALC=$(SUPPORT)/calc-3-4-2
 
 # EPICS_BASE usually appears last so other apps can override stuff:
 EPICS_BASE=$(HOME)/EPICS/base
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/2Kstm.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,36 @@
+record (ai, "FHI2KSTMAFM:MaxiGauge:ForeVacuum")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHI2KSTMAFM:MaxiGauge:ExchangeGas")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHI2KSTMAFM:MaxiGauge:PrepChamber")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHI2KSTMAFM:MaxiGauge:MainChamber")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHI2KSTMAFM:M1900:MicroscopeTemperature")
+{
+  field(EGU, "K")
+}
+record (ai, "FHI2KSTMAFM:Eurotherm:SampleTemperature")
+{
+  field(EGU, "gradC")
+}
+record (ai, "FHI:CP:PUMPENSTAND:MaxiGauge:ForeVacuum")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHI:CP:PUMPENSTAND:MaxiGauge:MainChamber")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHI:CP:PUMPENSTAND:IonGetter:Monitor")
+{
+  field(EGU, "V")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/4kStmEuro.sub	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,20 @@
+# Macros:
+#  P         Device prefix
+#  Q         Device suffix
+#  PORT      Asyn port name
+#  GAD       Global address number, normally 0
+#  LAD       Local address number, normally 1
+#  SPMAX     Maximum setpoint
+#  RRMAX     Maximum ramp rate
+#  SPCMD     Setpoint command, set to 'write' for floating point
+#  PREC      Setpoint precision
+#  EGU       Engineering units for ramp rate, default is C/s
+#  name      object and gui association name
+#  gda_name  Name to export to gda as
+#  gda_desc  Description for gda
+file db/eurotherm2k.template
+{
+pattern { P, Q, PORT, GAD, LAD, SPMAX, RRMAX, SPCMD, PREC, EGU, name, gda_name, gda_desc }
+    { "FHI4KSTM:", "EUROTH01", "EUROTH_01", "0", "1", "1000", "1", "writeint", "0", "C/s", "", "", "" }
+    { "FHI4KSTM:", "EUROTH02", "EUROTH_02", "0", "1", "1000", "1", "writeint", "0", "C/s", "", "", "" }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/M1900.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,9 @@
+record(ai, "$(P):$(Q):temp")
+{
+field(SCAN, "5 second")
+field(DTYP,"stream")
+field(INP,"@M1900.proto read $(PORT) -1")
+field(EGU,"K")
+field(HOPR,"400")
+field(LOPR,"0")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/M1900.proto	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,2 @@
+Terminator = CR NUL;
+read { out "T"; in "T"; in "%f"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/PhotonSTM.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,12 @@
+record (ai, "FHIPHOTONSTM:NI6009:MainChamber")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHIPHOTONSTM:NI6009:ForeVacuum")
+{
+  field(EGU, "mbar")
+}
+record (ai, "FHIPHOTONSTM:NI6009:PrepChamber")
+{
+  field(EGU, "mbar")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/adcPi.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,10 @@
+record(ai,"$(P)"){
+  field(DTYP,"adcPi")
+  field(DESC,"ADC Pi Channel $(C)")
+  field(SCAN,"$(SCAN=1 second)")
+  field(INP,"#C1 S$(C) @dumm")
+  field(LINR,"LINEAR")
+  field (EGUF, "1.024")
+  field (EGUL, "-1.024")
+  field(EGU,"V")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/dht.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,28 @@
+record(ai,"$(P):$(Q):Temperature")
+{
+  field(DESC,"Ambient temp")
+  field(INP,"$(P):$(Q):R_DHT.VALA CP NMS")
+  field(EGU,"degC")
+}
+
+record(ai,"$(P):$(Q):Humidity")
+{
+  field(DESC,"Ambient humidity")
+  field(INP,"$(P):$(Q):R_DHT.VALB CP NMS")
+  field(EGU,"rel%")
+}
+
+record(aSub,"$(P):$(Q):R_DHT")
+{
+  field(DESC, "Reads DHT from GPIO def in A")
+  field(INAM,"aSubReadDHTInit")
+  field(SNAM,"aSubReadDHTProcess")
+  field(SCAN,"10 second")
+  field(INPA,"4")
+  field(FTA, "USHORT")
+# Temperature in VALA
+  field(FTVA, "DOUBLE")
+# Humidity in VALB
+  field(FTVB, "DOUBLE")
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/dualgauge.proto	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,6 @@
+getSensorValue {
+	out "PR\$1\r";
+	in ACK CR 0x00 LF;
+	out ENQ;
+	in "%13c" CR 0x00 LF;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/dualgauge.sub	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,12 @@
+# macros
+# P -> Device
+# R -> PV
+# PORT -> Asyn Link
+# CHA -> Physical Port on the Pfeiffer Maxigauge
+
+file db/dualgauge.template
+{
+	pattern{ P, R, PORT, CHA }
+	{ "FHI4KSTM:DualGauge", "ExchangeGas1", "DUAL_01", "1" }
+	{ "FHI4KSTM:DualGauge", "ExchangeGas2", "DUAL_01", "2" }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/dualgauge.template	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,22 @@
+record(stringin, "$(P):$(R):getter"){
+	field(DESC, "get Pfeiffer MaxiGauge Sensor Value")
+	field(DTYP, "stream")
+	field(INP, "@dualgauge.proto getSensorValue($(CHA)) $(PORT)")
+	field(SCAN, "1 second")
+	field(FLNK, "$(P):$(R):Status")
+}
+
+record(scalcout, "$(P):$(R):Status"){
+	field(DESC, "extracts the Status from the response")
+	field(INAA, "$(P):$(R):getter")
+	field(CALC, "SSCANF(AA, \"%d%*\")")
+	field(FLNK, "$(P):$(R):Pressure")
+}
+
+record(scalcout, "$(P):$(R):Pressure"){
+	field(DESC, "extracts the Pressure from the response")
+	field(INAA, "$(P):$(R):getter")
+        field(CALC, "SSCANF(AA, \"%*2c%E\")")
+	field(PREC, "12")
+        field(EGU, "mbar")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/eurotherm2k.proto	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,96 @@
+## \file
+## Stream Device Protocol for eurotherm 2000 series EI Bisynch
+## \param GAD = First char of address, e.g. address = 1, GAD = 0, address = 12, GAD = 1
+## \param LAD = Second char of address, e.g. address = 1, LAD = 1, address = 12, LAD = 2
+
+locktimeout = 5000;
+
+## Unfortunately, this is designed with a checksum terminator.
+OutTerminator   = "";
+replytimeout = 200;
+## Setting a small readtimeout means that we can get data without needing a terminator
+readtimeout  = 100;
+extrainput   = Ignore;
+
+#STX = "\x02"
+#ETX = "\x03"
+#EOT = "\x04"
+#ENQ = "\x05"
+#ACK = "\x06"
+
+## Read value
+## \code
+## send: [EOT](GAD)(GAD)(LAD)(LAD)(CHAN)(C1)(C2)[ENQ]
+## reply: [STX](CHAN)(C1)(C2)<DATA>[ETX](BCC)
+## \endcode
+## - $1 = GAD
+## - $2 = LAD
+## - $3 = command mnemonic
+#############################################################################
+read { InTerminator = "\x03"; out "\x04\$1\$1\$2\$2\$3\x05"; in "\x02\$3%f"; }
+
+## Read value, but in hex
+readhex { InTerminator = "\x03"; out "\x04\$1\$1\$2\$2\$3\x05"; in "\x02\$3>%x"; }
+
+## NOTE: we rely on readtimeout for the in commands. 
+## Could use maxInput, but that screws up record initialisation (once inTerminator is set it can't be overwritten in the \@init handler)
+##
+## Write value
+## \code
+## send: [EOT](GAD)(GAD)(LAD)(LAD)[STX](CHAN)(C1)(C2)<DATA>[ETX](BCC)
+## reply: [ACK] or [NAK], discarded as no terminator
+## \endcode
+## - $1 = GAD
+## - $2 = LAD
+## - $3 = command mnemonic
+## - $4 = device prefix, \$(P)\$(Q)
+#############################################################################
+write {  InTerminator = ""; out "\x04\$1\$1\$2\$2\x02\$3%f\x03%6<xor>"; in "\x06"; @init{ read; }; @mismatch{ in "%(\$4:ERR.PROC)r"; }; }
+
+## Write a value in int rather than float
+writeint {  InTerminator = ""; out "\x04\$1\$1\$2\$2\x02\$3%i\x03%6<xor>"; in "\x06"; @init{ read; }; @mismatch{ in "%(\$4:ERR.PROC)r"; }; }
+
+
+### \brief Controller configuration mode
+##
+## This mode enable setting a number of controller configuration settings 
+## (see Communications Handbook PDF pages 5-25 onwards)
+##
+## We set the mode by sending a command 'IM2' and get out of the mode with the command 'IM0'
+## While in configuration mode the controller makes itself address 0 so any configuration commands
+## have to be sent to address = 0
+setConfMode {  InTerminator = ""; out "\x04\$1\$1\$2\$2\x02IM2\x03%6<xor>"; in "\x06"; @mismatch{ in "%(\$3:ERR.PROC)r"; }; }
+
+## Escape from the configuration mode in to normal operation mode
+clearConfMode {  InTerminator = ""; out "\x040000\x02IM0\x03%6<xor>"; in "\x06"; @mismatch{ in "%(\$1:ERR.PROC)r"; }; }
+
+## Get the current mode of the controller: 0=normal mode, 2=configuration mode
+getConfMode { InTerminator = "\x03"; out "\x0400%(\$1:ADDR.VAL)i%(\$1:ADDR.VAL)iIM\x05"; in "\x02IM%i."; }
+
+## \brief Set device precision.
+##
+## The number of decimal places in the controller is also the precision the data is returned when communicating over serial.
+## This parameter can only be set when in Configuration Mode (see above)
+setDecPlaces { InTerminator = ""; out "\x0400%(\$1:ADDR.VAL)i%(\$1:ADDR.VAL)i\x02QD%i\x03%6<xor>"; in "\x06"; @mismatch{ in "%(\$1:ERR.PROC)r"; }; }
+
+## Read the number of decimal places used in the controller
+getDecPlaces { InTerminator = "\x03"; out "\x0400%(\$1:ADDR.VAL)i%(\$1:ADDR.VAL)iQD\x05"; in "\x02QD%i."; }
+
+## The ramp rate time unit. Note this parameter can only be set when in Configuration Mode
+setRampRateUnit { InTerminator = ""; out "\x0400%(\$1:ADDR.VAL)i%(\$1:ADDR.VAL)i\x02QJ%i\x03%6<xor>"; in "\x06"; @mismatch{ in "%(\$1:ERR.PROC)r"; }; }
+
+## Read out the ramp rate time unit
+getRampRateUnit { InTerminator = "\x03"; out "\x0400%(\$1:ADDR.VAL)i%(\$1:ADDR.VAL)iQJ\x05"; in "\x02QJ%i."; }
+
+## \brief Write any ASCII string command to the device.
+## 
+## It will read the device address (although only the LAD part) from another record: \$1:ADDR.VAL
+addrWrite { InTerminator = "";     out "\x0400%(\$1:ADDR.VAL)i%(\$1:ADDR.VAL)i\x02%s\x03%6<xor>"; in "\x06";    @mismatch{ in "%(\$1:ERR.PROC)r"; }; }
+
+## \brief Read back any ASCII string paramter from the device.
+##
+## This will also read the device address from an external record.
+addrRead  { InTerminator = "\x03"; out "\x0400%(\$1:ADDR.VAL)i%(\$1:ADDR.VAL)i%s\x05"; in "\x02%(\$1:ADDR:RESP.VAL)6c"; }
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/eurotherm2k.template	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,510 @@
+#! Generated by VisualDCT v2.6
+#! DBDSTART
+#! DBD("../../example/dbd/example.dbd")
+#! DBDEND
+
+
+# % macro, P, Device prefix
+# % macro, Q, Device suffix
+# % macro, PORT, Asyn port name
+# % macro, GAD, Global address number, normally 0
+# % macro, LAD, Local address number, normally 1
+# % macro, SPMAX, Maximum setpoint
+# % macro, RRMAX, Maximum ramp rate
+# % macro, SPCMD, Setpoint command, set to 'write' for floating point
+# % macro, PREC, Setpoint precision
+# % macro, EGU, Engineering units for ramp rate, default is C/s
+# % macro, name, object and gui association name
+# % macro, gda_name, Name to export to gda as
+# % macro, gda_desc, Description for gda
+# % gdatag,template,eurotherm2k,$(gda_name=),$(gda_desc=)
+# % gui, $(name=), edmembed, eurotherm2k_embed.edl, eurotherm=$(P)$(Q)
+# % gui, $(name=), edm, eurotherm2k.edl, eurotherm=$(P)$(Q)
+# % autosave 2 SCAN
+record(seq, "$(P)$(Q):UPDATE") {
+  field(DESC, "Update Temp Params")
+  field(DOL1, "1")
+  field(DOL2, "1")
+  field(DOL3, "1")
+  field(DOL4, "1")
+  field(LNK1, "$(P)$(Q):SP:RBV.PROC")
+  field(LNK2, "$(P)$(Q):RR:RBV.PROC")
+  field(LNK3, "$(P)$(Q):O:RBV.PROC")
+  field(LNK4, "$(P)$(Q):PV:RBV.PROC")
+  field(SCAN, "1 second")
+  field(PINI, "YES")
+  field(DOL5, "1")
+  field(LNK5, "$(P)$(Q):MAN:RBV_AI.PROC")
+}
+
+# % autosave 2 SCAN
+record(seq, "$(P)$(Q):PID") {
+  field(DESC, "Update PID Params")
+  field(DOL1, "1")
+  field(DOL2, "1")
+  field(DOL3, "1")
+  field(LNK1, "$(P)$(Q):P:RBV.PROC")
+  field(LNK2, "$(P)$(Q):I:RBV.PROC")
+  field(LNK3, "$(P)$(Q):D:RBV.PROC")
+  field(SCAN, "10 second")
+  field(PINI, "YES")
+}
+
+#% gdatag,pv,rw,$(gda_name=),SP
+record(ao, "$(P)$(Q):SP") {
+  field(DESC, "Setpoint")
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):SP:RBV")
+  field(OUT, "@eurotherm2k.proto $(SPCMD=writeint)($(GAD),$(LAD),S1,$(P)$(Q)) $(PORT)")
+  field(PREC, "$(PREC=0)")
+  field(EGU, "C")
+  field(DRVH, "$(SPMAX=1000)")
+  field(DRVL, "0")
+  field(PINI, "YES")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,ro,$(gda_name=),SPRBV
+# % archiver 10 Monitor
+record(ai, "$(P)$(Q):SP:RBV") {
+  field(DESC, "Setpoint Readback")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),S1) $(PORT)")
+  field(PREC, "$(PREC=0)")
+  field(EGU, "C")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+#% gdatag,pv,rw,$(gda_name=),RR
+record(ao, "$(P)$(Q):RR") {
+  field(DESC, "Ramprate")
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):RR:RBV")
+  field(OUT, "@eurotherm2k.proto write($(GAD),$(LAD),RR,$(P)$(Q)) $(PORT)")
+  field(PREC, "3")
+  field(EGU, "$(EGU=C/s)")
+  field(DRVH, "$(RRMAX=1)")
+  field(DRVL, "0")
+  field(PINI, "YES")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,ro,$(gda_name=),RRRBV
+# % archiver 10 Monitor
+record(ai, "$(P)$(Q):RR:RBV") {
+  field(DESC, "Ramprate Readback")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),RR) $(PORT)")
+  field(PREC, "3")
+  field(EGU, "$(EGU=C/s)")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+#% gdatag,pv,rw,$(gda_name=),O
+record(ao, "$(P)$(Q):O") {
+  field(DESC, "Output")
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):O:RBV")
+  field(OUT, "@eurotherm2k.proto write($(GAD),$(LAD),OP,$(P)$(Q)) $(PORT)")
+  field(PREC, "1")
+  field(EGU, "%")
+  field(DRVH, "100")
+  field(DRVL, "-100")
+  field(PINI, "YES")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,ro,$(gda_name=),ORBV
+# % archiver 1 Monitor
+record(ai, "$(P)$(Q):O:RBV") {
+  field(DESC, "Ouptut Readback")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),OP) $(PORT)")
+  field(PREC, "1")
+  field(EGU, "%")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,ro,$(gda_name=),PVRBV
+# % archiver 1 Monitor
+record(ai, "$(P)$(Q):PV:RBV") {
+  field(DESC, "Temperature Readback")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),PV) $(PORT)")
+  field(PREC, "1")
+  field(EGU, "C")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+#% gdatag,pv,rw,$(gda_name=),P
+record(ao, "$(P)$(Q):P") {
+  field(DESC, "P Param")
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):P:RBV")
+  field(OUT, "@eurotherm2k.proto writeint($(GAD),$(LAD),XP,$(P)$(Q)) $(PORT)")
+  field(PREC, "0")
+  field(VAL, "150")
+  field(PINI, "YES")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,ro,$(gda_name=),PRBV
+# % archiver 10 Monitor
+record(ai, "$(P)$(Q):P:RBV") {
+  field(DESC, "P Param Readback")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),XP) $(PORT)")
+  field(PREC, "0")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+#% gdatag,pv,rw,$(gda_name=),I
+record(ao, "$(P)$(Q):I") {
+  field(DESC, "I Param")
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):I:RBV")
+  field(OUT, "@eurotherm2k.proto writeint($(GAD),$(LAD),TI,$(P)$(Q)) $(PORT)")
+  field(PREC, "0")
+  field(VAL, "28")
+  field(PINI, "YES")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,ro,$(gda_name=),IRBV
+# % archiver 10 Monitor
+record(ai, "$(P)$(Q):I:RBV") {
+  field(DESC, "I Param Readback")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),TI) $(PORT)")
+  field(PREC, "0")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+#% gdatag,pv,rw,$(gda_name=),D
+record(ao, "$(P)$(Q):D") {
+  field(DESC, "D Param")
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):D:RBV")
+  field(OUT, "@eurotherm2k.proto writeint($(GAD),$(LAD),TD,$(P)$(Q)) $(PORT)")
+  field(PREC, "0")
+  field(VAL, "4")
+  field(PINI, "YES")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,ro,$(gda_name=),DRBV
+# % archiver 10 Monitor
+record(ai, "$(P)$(Q):D:RBV") {
+  field(DESC, "D Param Readback")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),TD) $(PORT)")
+  field(PREC, "0")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,pv,rw,$(gda_name=),ERR
+record(mbbi, "$(P)$(Q):ERR") {
+  field(DESC, "Error message")
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto readhex($(GAD),$(LAD),EE) $(PORT)")
+  field(ZRVL, "0")
+  field(ZRST, "No Error")
+  field(ONVL, "1")
+  field(ONST, "Invalid Param")
+  field(TWVL, "2")
+  field(TWST, "Read Only")
+  field(THVL, "7")
+  field(THST, "Incorrect Msg")
+  field(FRVL, "8")
+  field(FRST, "Limit Error")
+  field(PINI, "YES")
+  field(SDIS, "$(P)$(Q):DISABLE")
+}
+
+# % gdatag,binary,rw,$(gda_name=),DISABLE
+record(bo, "$(P)$(Q):DISABLE") {
+  field(DESC, "Disable comms")
+  field(PINI, "YES")
+  field(VAL, "1")
+  field(OMSL, "supervisory")
+  field(ZNAM, "Enabled")
+  field(ONAM, "Disabled")
+}
+
+record(bo, "$(P)$(Q):MAN") {
+  field(DESC, "Manual mode enable")
+  field(DTYP, "stream")
+  field(SDIS, "$(P)$(Q):DISABLE")
+  field(FLNK, "$(P)$(Q):MAN:RBV_AI")
+  field(OUT, "@eurotherm2k.proto writeint($(GAD),$(LAD),mA,$(P)$(Q)) $(PORT)")
+  field(ZNAM, "Automatic")
+  field(ONAM, "Manual")
+  field(PINI, "YES")
+}
+
+record(ai, "$(P)$(Q):MAN:RBV_AI") {
+  field(DESC, "Manual mode readback")
+  field(DTYP, "stream")
+  field(SDIS, "$(P)$(Q):DISABLE")
+  field(INP, "@eurotherm2k.proto read($(GAD),$(LAD),mA) $(PORT)")
+  field(FLNK, "$(P)$(Q):MAN:RBV")
+}
+
+# % archiver 10 Monitor
+record(bi, "$(P)$(Q):MAN:RBV") {
+  field(DESC, "Manual mode readback")
+  field(DTYP, "Soft Channel")
+  field(INP, "$(P)$(Q):MAN:RBV_AI")
+  field(ZNAM, "Automatic")
+  field(ONAM, "Manual")
+}
+
+record(mbbi, "$(P)$(Q):CONF:MODE") {
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto getConfMode($(P)$(Q)) $(PORT)")
+  field(ZRVL, "0")
+  field(ONVL, "2")
+  field(ZRST, "operational")
+  field(ONST, "configuration")
+}
+
+record(longin, "$(P)$(Q):ADDR") {
+  field(FLNK, "$(P)$(Q):CONF:DLY")
+}
+
+record(longout, "$(P)$(Q):ADDR:DEVICE") {
+  field(VAL, "$(LAD)")
+  field(OUT, "$(P)$(Q):ADDR PP")
+}
+
+record(bo, "$(P)$(Q):CONF:SETMODE") {
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):CONF:ZEROADDR")
+  field(OUT, "@eurotherm2k.proto setConfMode($(GAD),$(LAD),$(P)$(Q)) $(PORT)")
+  field(ZNAM, "0")
+  field(ONAM, "1")
+}
+
+record(bo, "$(P)$(Q):CONF:CLEARMODE") {
+  field(DTYP, "stream")
+  field(FLNK, "$(P)$(Q):ADDR:DEVICE")
+  field(OUT, "@eurotherm2k.proto clearConfMode($(P)$(Q)) $(PORT)")
+  field(ZNAM, "0")
+  field(ONAM, "1")
+}
+
+record(longout, "$(P)$(Q):CONF:ZEROADDR") {
+  field(VAL, "0")
+  field(OUT, "$(P)$(Q):ADDR PP")
+}
+
+record(stringout, "$(P)$(Q):ADDR:WR") {
+  field(DESC, "write cmd")
+  field(DTYP, "stream")
+  field(OUT, "@eurotherm2k.proto addrWrite($(P)$(Q)) $(PORT)")
+  field(PINI, "NO")
+}
+
+record(stringout, "$(P)$(Q):ADDR:RD") {
+  field(DESC, "Read parameter")
+  field(DTYP, "stream")
+  field(OUT, "@eurotherm2k.proto addrRead($(P)$(Q)) $(PORT)")
+}
+
+record(stringin, "$(P)$(Q):ADDR:RESP") {
+  field(DESC, "Read response")
+}
+
+record(mbbi, "$(P)$(Q):CONF:DECP") {
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto getDecPlaces($(P)$(Q)) $(PORT)")
+  field(ZRVL, "0")
+  field(ONVL, "1")
+  field(ZRST, "nnnn.")
+  field(ONST, "nnn.n")
+  field(DESC, "decimal places")
+  field(TWVL, "2")
+  field(TWST, "nn.nn")
+}
+
+record(mbbo, "$(P)$(Q):CONF:SET:DECP") {
+  field(DESC, "decimal places")
+  field(DTYP, "stream")
+  field(OUT, "@eurotherm2k.proto setDecPlaces($(P)$(Q)) $(PORT)")
+  field(ZRVL, "0")
+  field(ONVL, "1")
+  field(TWVL, "2")
+  field(ZRST, "nnnn.")
+  field(ONST, "nnn.n")
+  field(TWST, "nn.nn")
+}
+
+record(fanout, "$(P)$(Q):CONF:READ") {
+  field(FLNK, "$(P)$(Q):CONF:DECP")
+  field(LNK1, "$(P)$(Q):CONF:RREGU")
+}
+
+record(mbbi, "$(P)$(Q):CONF:RREGU") {
+  field(DTYP, "stream")
+  field(INP, "@eurotherm2k.proto getRampRateUnit($(P)$(Q)) $(PORT)")
+  field(ZRVL, "0")
+  field(ONVL, "1")
+  field(ZRST, "sec")
+  field(ONST, "min")
+  field(DESC, "decimal places")
+  field(TWVL, "2")
+  field(TWST, "hour")
+}
+
+record(mbbo, "$(P)$(Q):CONF:SET:RREGU") {
+  field(DESC, "decimal places")
+  field(DTYP, "stream")
+  field(OUT, "@eurotherm2k.proto setRampRateUnit($(P)$(Q)) $(PORT)")
+  field(ZRVL, "0")
+  field(ONVL, "1")
+  field(TWVL, "2")
+  field(ZRST, "sec")
+  field(ONST, "min")
+  field(TWST, "hour")
+}
+
+
+record(seq, "$(P)$(Q):CONF:DLY") {
+  field(SELM, "Specified")
+  field(SELL, "1")
+  field(DLY1, "5.0")
+  field(DOL1, "1")
+  field(LNK1, "$(P)$(Q):CONF:MODE.PROC CA MS")
+}
+
+#! Further lines contain data used by VisualDCT
+#! View(206,1478,1.1)
+#! Record("$(P)$(Q):UPDATE",960,222,0,0,"$(P)$(Q):UPDATE")
+#! Field("$(P)$(Q):UPDATE.LNK1",16777215,1,"$(P)$(Q):UPDATE.LNK1")
+#! Link("$(P)$(Q):UPDATE.LNK1","$(P)$(Q):SP:RBV.PROC")
+#! Field("$(P)$(Q):UPDATE.LNK2",16777215,1,"$(P)$(Q):UPDATE.LNK2")
+#! Link("$(P)$(Q):UPDATE.LNK2","$(P)$(Q):RR:RBV.PROC")
+#! Field("$(P)$(Q):UPDATE.LNK3",16777215,1,"$(P)$(Q):UPDATE.LNK3")
+#! Link("$(P)$(Q):UPDATE.LNK3","$(P)$(Q):O:RBV.PROC")
+#! Field("$(P)$(Q):UPDATE.LNK4",16777215,1,"$(P)$(Q):UPDATE.LNK4")
+#! Link("$(P)$(Q):UPDATE.LNK4","$(P)$(Q):PV:RBV.PROC")
+#! Field("$(P)$(Q):UPDATE.LNK5",16777215,1,"$(P)$(Q):UPDATE.LNK5")
+#! Link("$(P)$(Q):UPDATE.LNK5","$(P)$(Q):MAN:RBV_AI.PROC")
+#! Record("$(P)$(Q):PID",1080,1258,0,1,"$(P)$(Q):PID")
+#! Field("$(P)$(Q):PID.LNK1",16777215,1,"$(P)$(Q):PID.LNK1")
+#! Link("$(P)$(Q):PID.LNK1","$(P)$(Q):P:RBV.PROC")
+#! Field("$(P)$(Q):PID.LNK2",16777215,1,"$(P)$(Q):PID.LNK2")
+#! Link("$(P)$(Q):PID.LNK2","$(P)$(Q):I:RBV.PROC")
+#! Field("$(P)$(Q):PID.LNK3",16777215,1,"$(P)$(Q):PID.LNK3")
+#! Link("$(P)$(Q):PID.LNK3","$(P)$(Q):D:RBV.PROC")
+#! Record("$(P)$(Q):SP",1200,224,0,0,"$(P)$(Q):SP")
+#! Field("$(P)$(Q):SP.FLNK",16777215,1,"$(P)$(Q):SP.FLNK")
+#! Link("$(P)$(Q):SP.FLNK","$(P)$(Q):SP:RBV")
+#! Field("$(P)$(Q):SP.SDIS",16777215,1,"$(P)$(Q):SP.SDIS")
+#! Link("$(P)$(Q):SP.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):SP:RBV",1480,240,0,0,"$(P)$(Q):SP:RBV")
+#! Field("$(P)$(Q):SP:RBV.PROC",16777215,0,"$(P)$(Q):SP:RBV.PROC")
+#! Field("$(P)$(Q):SP:RBV.SDIS",16777215,1,"$(P)$(Q):SP:RBV.SDIS")
+#! Link("$(P)$(Q):SP:RBV.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):RR",1180,564,0,0,"$(P)$(Q):RR")
+#! Field("$(P)$(Q):RR.FLNK",16777215,1,"$(P)$(Q):RR.FLNK")
+#! Link("$(P)$(Q):RR.FLNK","$(P)$(Q):RR:RBV")
+#! Field("$(P)$(Q):RR.SDIS",16777215,1,"$(P)$(Q):RR.SDIS")
+#! Link("$(P)$(Q):RR.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):RR:RBV",1500,500,0,0,"$(P)$(Q):RR:RBV")
+#! Field("$(P)$(Q):RR:RBV.PROC",16777215,0,"$(P)$(Q):RR:RBV.PROC")
+#! Field("$(P)$(Q):RR:RBV.SDIS",16777215,1,"$(P)$(Q):RR:RBV.SDIS")
+#! Link("$(P)$(Q):RR:RBV.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):O",1180,824,0,0,"$(P)$(Q):O")
+#! Field("$(P)$(Q):O.FLNK",16777215,1,"$(P)$(Q):O.FLNK")
+#! Link("$(P)$(Q):O.FLNK","$(P)$(Q):O:RBV")
+#! Field("$(P)$(Q):O.SDIS",16777215,1,"$(P)$(Q):O.SDIS")
+#! Link("$(P)$(Q):O.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):O:RBV",1480,740,0,0,"$(P)$(Q):O:RBV")
+#! Field("$(P)$(Q):O:RBV.PROC",16777215,0,"$(P)$(Q):O:RBV.PROC")
+#! Field("$(P)$(Q):O:RBV.SDIS",16777215,1,"$(P)$(Q):O:RBV.SDIS")
+#! Link("$(P)$(Q):O:RBV.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):PV:RBV",1460,980,0,0,"$(P)$(Q):PV:RBV")
+#! Field("$(P)$(Q):PV:RBV.PROC",16777215,0,"$(P)$(Q):PV:RBV.PROC")
+#! Field("$(P)$(Q):PV:RBV.SDIS",16777215,1,"$(P)$(Q):PV:RBV.SDIS")
+#! Link("$(P)$(Q):PV:RBV.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):P",1320,1231,0,0,"$(P)$(Q):P")
+#! Field("$(P)$(Q):P.FLNK",16777215,1,"$(P)$(Q):P.FLNK")
+#! Link("$(P)$(Q):P.FLNK","$(P)$(Q):P:RBV")
+#! Field("$(P)$(Q):P.SDIS",16777215,1,"$(P)$(Q):P.SDIS")
+#! Link("$(P)$(Q):P.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):P:RBV",1580,1234,0,0,"$(P)$(Q):P:RBV")
+#! Field("$(P)$(Q):P:RBV.PROC",16777215,0,"$(P)$(Q):P:RBV.PROC")
+#! Field("$(P)$(Q):P:RBV.SDIS",16777215,1,"$(P)$(Q):P:RBV.SDIS")
+#! Link("$(P)$(Q):P:RBV.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):I",1300,1511,0,0,"$(P)$(Q):I")
+#! Field("$(P)$(Q):I.FLNK",16777215,1,"$(P)$(Q):I.FLNK")
+#! Link("$(P)$(Q):I.FLNK","$(P)$(Q):I:RBV")
+#! Field("$(P)$(Q):I.SDIS",16777215,1,"$(P)$(Q):I.SDIS")
+#! Link("$(P)$(Q):I.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):I:RBV",1580,1514,0,0,"$(P)$(Q):I:RBV")
+#! Field("$(P)$(Q):I:RBV.PROC",16777215,0,"$(P)$(Q):I:RBV.PROC")
+#! Field("$(P)$(Q):I:RBV.SDIS",16777215,1,"$(P)$(Q):I:RBV.SDIS")
+#! Link("$(P)$(Q):I:RBV.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):D",1300,1731,0,0,"$(P)$(Q):D")
+#! Field("$(P)$(Q):D.FLNK",16777215,1,"$(P)$(Q):D.FLNK")
+#! Link("$(P)$(Q):D.FLNK","$(P)$(Q):D:RBV")
+#! Field("$(P)$(Q):D.SDIS",16777215,1,"$(P)$(Q):D.SDIS")
+#! Link("$(P)$(Q):D.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):D:RBV",1560,1734,0,0,"$(P)$(Q):D:RBV")
+#! Field("$(P)$(Q):D:RBV.PROC",16777215,0,"$(P)$(Q):D:RBV.PROC")
+#! Field("$(P)$(Q):D:RBV.SDIS",16777215,1,"$(P)$(Q):D:RBV.SDIS")
+#! Link("$(P)$(Q):D:RBV.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):ERR",1480,2234,0,0,"$(P)$(Q):ERR")
+#! Field("$(P)$(Q):ERR.SDIS",16777215,1,"$(P)$(Q):ERR.SDIS")
+#! Link("$(P)$(Q):ERR.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):DISABLE",1920,1040,0,1,"$(P)$(Q):DISABLE")
+#! Field("$(P)$(Q):DISABLE.VAL",16777215,0,"$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):MAN",1300,1971,0,1,"$(P)$(Q):MAN")
+#! Field("$(P)$(Q):MAN.FLNK",16777215,1,"$(P)$(Q):MAN.FLNK")
+#! Link("$(P)$(Q):MAN.FLNK","$(P)$(Q):MAN:RBV_AI")
+#! Field("$(P)$(Q):MAN.SDIS",16777215,1,"$(P)$(Q):MAN.SDIS")
+#! Link("$(P)$(Q):MAN.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Record("$(P)$(Q):MAN:RBV_AI",1560,1954,0,0,"$(P)$(Q):MAN:RBV_AI")
+#! Field("$(P)$(Q):MAN:RBV_AI.SDIS",16777215,1,"$(P)$(Q):MAN:RBV_AI.SDIS")
+#! Link("$(P)$(Q):MAN:RBV_AI.SDIS","$(P)$(Q):DISABLE.VAL")
+#! Field("$(P)$(Q):MAN:RBV_AI.FLNK",16777215,1,"$(P)$(Q):MAN:RBV_AI.FLNK")
+#! Link("$(P)$(Q):MAN:RBV_AI.FLNK","$(P)$(Q):MAN:RBV")
+#! Field("$(P)$(Q):MAN:RBV_AI.VAL",16777215,1,"$(P)$(Q):MAN:RBV_AI.VAL")
+#! Field("$(P)$(Q):MAN:RBV_AI.PROC",16777215,0,"$(P)$(Q):MAN:RBV_AI.PROC")
+#! Record("$(P)$(Q):MAN:RBV",1920,1934,0,0,"$(P)$(Q):MAN:RBV")
+#! Field("$(P)$(Q):MAN:RBV.INP",16777215,0,"$(P)$(Q):MAN:RBV.INP")
+#! Link("$(P)$(Q):MAN:RBV.INP","$(P)$(Q):MAN:RBV_AI.VAL")
+#! Record("$(P)$(Q):CONF:MODE",420,1660,0,1,"$(P)$(Q):CONF:MODE")
+#! Field("$(P)$(Q):CONF:MODE.PROC",16777215,1,"$(P)$(Q):CONF:MODE.PROC")
+#! Record("$(P)$(Q):ADDR",720,1370,0,1,"$(P)$(Q):ADDR")
+#! Field("$(P)$(Q):ADDR.VAL",16777215,0,"$(P)$(Q):ADDR.VAL")
+#! Field("$(P)$(Q):ADDR.FLNK",16777215,1,"$(P)$(Q):ADDR.FLNK")
+#! Link("$(P)$(Q):ADDR.FLNK","$(P)$(Q):CONF:DLY")
+#! Record("$(P)$(Q):ADDR:DEVICE",420,1436,0,0,"$(P)$(Q):ADDR:DEVICE")
+#! Field("$(P)$(Q):ADDR:DEVICE.OUT",16777215,1,"$(P)$(Q):ADDR:DEVICE.OUT")
+#! Link("$(P)$(Q):ADDR:DEVICE.OUT","$(P)$(Q):ADDR.VAL")
+#! Record("$(P)$(Q):CONF:SETMODE",120,1154,0,1,"$(P)$(Q):CONF:SETMODE")
+#! Field("$(P)$(Q):CONF:SETMODE.FLNK",16777215,1,"$(P)$(Q):CONF:SETMODE.FLNK")
+#! Link("$(P)$(Q):CONF:SETMODE.FLNK","$(P)$(Q):CONF:ZEROADDR")
+#! Record("$(P)$(Q):CONF:CLEARMODE",120,1394,0,1,"$(P)$(Q):CONF:CLEARMODE")
+#! Field("$(P)$(Q):CONF:CLEARMODE.FLNK",16777215,1,"$(P)$(Q):CONF:CLEARMODE.FLNK")
+#! Link("$(P)$(Q):CONF:CLEARMODE.FLNK","$(P)$(Q):ADDR:DEVICE")
+#! Record("$(P)$(Q):CONF:ZEROADDR",420,1256,0,0,"$(P)$(Q):CONF:ZEROADDR")
+#! Field("$(P)$(Q):CONF:ZEROADDR.OUT",16777215,1,"$(P)$(Q):CONF:ZEROADDR.OUT")
+#! Link("$(P)$(Q):CONF:ZEROADDR.OUT","$(P)$(Q):ADDR.VAL")
+#! Record("$(P)$(Q):ADDR:WR",40,908,0,1,"$(P)$(Q):ADDR:WR")
+#! Record("$(P)$(Q):ADDR:RD",260,921,0,1,"$(P)$(Q):ADDR:RD")
+#! Record("$(P)$(Q):ADDR:RESP",460,930,0,1,"$(P)$(Q):ADDR:RESP")
+#! Record("$(P)$(Q):CONF:DECP",360,438,0,0,"$(P)$(Q):CONF:DECP")
+#! Record("$(P)$(Q):CONF:SET:DECP",660,418,0,1,"$(P)$(Q):CONF:SET:DECP")
+#! Record("$(P)$(Q):CONF:READ",20,556,0,1,"$(P)$(Q):CONF:READ")
+#! Field("$(P)$(Q):CONF:READ.FLNK",16777215,1,"$(P)$(Q):CONF:READ.FLNK")
+#! Link("$(P)$(Q):CONF:READ.FLNK","$(P)$(Q):CONF:DECP")
+#! Field("$(P)$(Q):CONF:READ.LNK1",16777215,1,"$(P)$(Q):CONF:READ.LNK1")
+#! Link("$(P)$(Q):CONF:READ.LNK1","$(P)$(Q):CONF:RREGU")
+#! Record("$(P)$(Q):CONF:RREGU",360,658,0,0,"$(P)$(Q):CONF:RREGU")
+#! Record("$(P)$(Q):CONF:SET:RREGU",660,658,0,1,"$(P)$(Q):CONF:SET:RREGU")
+#! Record("$(P)$(Q):CONF:DLY",760,1674,0,1,"$(P)$(Q):CONF:DLY")
+#! Field("$(P)$(Q):CONF:DLY.LNK1",16777215,0,"$(P)$(Q):CONF:DLY.LNK1")
+#! Link("$(P)$(Q):CONF:DLY.LNK1","$(P)$(Q):CONF:MODE.PROC")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/misc.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,9 @@
+record(calc, "$(P):$(Q):graphUpdate")
+{
+field(DESC, "Just a counter to update graphs")
+field(SCAN, "1 second")
+field(INPA, "$(P):$(Q):graphUpdate.VAL  NPP NMS")
+field(INPB, "1")
+field(CALC, "B?A+B:B")
+field(EGU, "rels")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/mtm.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,36 @@
+record(ai, "$(P):$(Q):thickness")
+{
+field(SCAN, "I/O Intr")
+field(DTYP,"stream")
+field(INP,"@mtm.proto read($(P):$(Q):sampleNr) $(PORT) -1")
+field(EGU,"nm")
+field(HOPR,"10")
+field(LOPR,"-15")
+field (FLNK,"$(P):$(Q):thicknessAVG")
+}
+
+record(longin, "$(P):$(Q):sampleNr")
+{
+  field (FLNK,"$(P):$(Q):sampleNrMDN")
+}
+
+record(compress,"$(P):$(Q):thicknessAVG")
+{
+  field(DESC, "thickness average")
+  field(INP,"$(P):$(Q):thickness.VAL NPP NMS")
+  field(ALG,"N to 1 Average")
+  field(NSAM,"1")
+  field(N,"10")
+  field(HOPR,"10")
+  field(LOPR,"-25")
+  field(EGU,"nm")
+}
+
+record(compress,"$(P):$(Q):sampleNrMDN")
+{
+  field(DESC, "thickness average")
+  field(INP,"$(P):$(Q):sampleNr.VAL NPP NMS")
+  field(ALG,"N to 1 Median")
+  field(NSAM,"1")
+  field(N,"10")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/mtm.proto	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,2 @@
+Terminator = CR NUL LF;
+read {  in "%(\$1)d,%f"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/pgc2.db	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,42 @@
+record(ai, "$(P):$(Q):dumm")
+{
+field(SCAN, "I/O Intr")
+field(DTYP,"stream")
+field(INP,"@pgc2.proto read($(P):$(Q)) $(PORT) -1")
+field(EGU,"mBar")
+field(HOPR,"1")
+field(LOPR,"1E-11")
+field(TPRO,"1")
+}
+
+record(calc, "$(P):$(Q):pressure1")
+{ 
+field(CALC,"A*10^B")
+field(EGU,"mBar")
+field(HOPR,"1")
+field(LOPR,"1E-11")
+}
+
+record(calc, "$(P):$(Q):pressure2")
+{
+field(CALC,"A*10^B")
+field(EGU,"mBar")
+field(HOPR,"1")
+field(LOPR,"1E-11")
+}
+
+record(calc, "$(P):$(Q):pressure3")
+{
+field(CALC,"A*10^B")
+field(EGU,"mBar")
+field(HOPR,"1")
+field(LOPR,"1E-11")
+}
+
+record(calc, "$(P):$(Q):pressure4")
+{
+field(CALC,"A*10^B")
+field(EGU,"mBar")
+field(HOPR,"1")
+field(LOPR,"1E-11")
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/db/pgc2.proto	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,4 @@
+Terminator = CR NUL LF;
+read { ExtraInput = Ignore;
+       in "::::%(\$1:pressure1.A)f%(\$1:pressure1.B)d %(\$1:pressure2.A)f%(\$1:pressure2.B)d %(\$1:pressure3.A)f%(\$1:pressure3.B)d %(\$1:pressure4.A)f%(\$1:pressure4.B)d %f";
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dbd/kstm.dbd	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,22004 @@
+menu(waveformPOST) {
+    choice(waveformPOST_Always, "Always")
+    choice(waveformPOST_OnChange, "On Change")
+}
+menu(sseqWAIT) {
+    choice(sseqWAIT_NoWait, "NoWait")
+    choice(sseqWAIT_Wait, "Wait")
+    choice(sseqWAIT_Wait1, "After1")
+    choice(sseqWAIT_Wait2, "After2")
+    choice(sseqWAIT_Wait3, "After3")
+    choice(sseqWAIT_Wait4, "After4")
+    choice(sseqWAIT_Wait5, "After5")
+    choice(sseqWAIT_Wait6, "After6")
+    choice(sseqWAIT_Wait7, "After7")
+    choice(sseqWAIT_Wait8, "After8")
+    choice(sseqWAIT_Wait9, "After9")
+    choice(sseqWAIT_Wait10, "AfterA")
+}
+menu(calcoutDOPT) {
+    choice(calcoutDOPT_Use_VAL, "Use CALC")
+    choice(calcoutDOPT_Use_OVAL, "Use OCAL")
+}
+menu(transformCOPT) {
+    choice(transformCOPT_CONDITIONAL, "Conditional")
+    choice(transformCOPT_ALWAYS, "Always")
+}
+menu(acalcoutSIZE) {
+    choice(acalcoutSIZE_NELM, "NELM")
+    choice(acalcoutSIZE_NUSE, "NUSE")
+}
+menu(menuFtype) {
+    choice(menuFtypeSTRING, "STRING")
+    choice(menuFtypeCHAR, "CHAR")
+    choice(menuFtypeUCHAR, "UCHAR")
+    choice(menuFtypeSHORT, "SHORT")
+    choice(menuFtypeUSHORT, "USHORT")
+    choice(menuFtypeLONG, "LONG")
+    choice(menuFtypeULONG, "ULONG")
+    choice(menuFtypeFLOAT, "FLOAT")
+    choice(menuFtypeDOUBLE, "DOUBLE")
+    choice(menuFtypeENUM, "ENUM")
+}
+menu(menuPini) {
+    choice(menuPiniNO, "NO")
+    choice(menuPiniYES, "YES")
+    choice(menuPiniRUN, "RUN")
+    choice(menuPiniRUNNING, "RUNNING")
+    choice(menuPiniPAUSE, "PAUSE")
+    choice(menuPiniPAUSED, "PAUSED")
+}
+menu(menuScan) {
+    choice(menuScanPassive, "Passive")
+    choice(menuScanEvent, "Event")
+    choice(menuScanI_O_Intr, "I/O Intr")
+    choice(menuScan10_second, "10 second")
+    choice(menuScan5_second, "5 second")
+    choice(menuScan2_second, "2 second")
+    choice(menuScan1_second, "1 second")
+    choice(menuScan_5_second, ".5 second")
+    choice(menuScan_2_second, ".2 second")
+    choice(menuScan_1_second, ".1 second")
+}
+menu(aSubLFLG) {
+    choice(aSubLFLG_IGNORE, "IGNORE")
+    choice(aSubLFLG_READ, "READ")
+}
+menu(swaitINAV) {
+    choice(swaitINAV_PV_OK, "PV OK")
+    choice(swaitINAV_PV_BAD, "PV BAD")
+    choice(swaitINAV_No_PV, "No PV")
+}
+menu(swaitINAP) {
+    choice(swaitINAP_No, "No")
+    choice(swaitINAP_Yes, "Yes")
+}
+menu(scalcoutINAV) {
+    choice(scalcoutINAV_EXT_NC, "Ext PV NC")
+    choice(scalcoutINAV_EXT, "Ext PV OK")
+    choice(scalcoutINAV_LOC, "Local PV")
+    choice(scalcoutINAV_CON, "Constant")
+}
+menu(menuPost) {
+    choice(menuPost_OnChange, "On Change")
+    choice(menuPost_Always, "Always")
+}
+menu(menuAlarmStat) {
+    choice(menuAlarmStatNO_ALARM, "NO_ALARM")
+    choice(menuAlarmStatREAD, "READ")
+    choice(menuAlarmStatWRITE, "WRITE")
+    choice(menuAlarmStatHIHI, "HIHI")
+    choice(menuAlarmStatHIGH, "HIGH")
+    choice(menuAlarmStatLOLO, "LOLO")
+    choice(menuAlarmStatLOW, "LOW")
+    choice(menuAlarmStatSTATE, "STATE")
+    choice(menuAlarmStatCOS, "COS")
+    choice(menuAlarmStatCOMM, "COMM")
+    choice(menuAlarmStatTIMEOUT, "TIMEOUT")
+    choice(menuAlarmStatHWLIMIT, "HWLIMIT")
+    choice(menuAlarmStatCALC, "CALC")
+    choice(menuAlarmStatSCAN, "SCAN")
+    choice(menuAlarmStatLINK, "LINK")
+    choice(menuAlarmStatSOFT, "SOFT")
+    choice(menuAlarmStatBAD_SUB, "BAD_SUB")
+    choice(menuAlarmStatUDF, "UDF")
+    choice(menuAlarmStatDISABLE, "DISABLE")
+    choice(menuAlarmStatSIMM, "SIMM")
+    choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS")
+    choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS")
+}
+menu(acalcoutINAP) {
+    choice(acalcoutINAP_No, "No PROC on Change")
+    choice(acalcoutINAP_Yes, "PROC on Change")
+}
+menu(scalcoutWAIT) {
+    choice(scalcoutWAIT_NoWait, "NoWait")
+    choice(scalcoutWAIT_Wait, "Wait")
+}
+menu(acalcoutWAIT) {
+    choice(acalcoutWAIT_NoWait, "NoWait")
+    choice(acalcoutWAIT_Wait, "Wait")
+}
+menu(aoOIF) {
+    choice(aoOIF_Full, "Full")
+    choice(aoOIF_Incremental, "Incremental")
+}
+menu(calcoutINAV) {
+    choice(calcoutINAV_EXT_NC, "Ext PV NC")
+    choice(calcoutINAV_EXT, "Ext PV OK")
+    choice(calcoutINAV_LOC, "Local PV")
+    choice(calcoutINAV_CON, "Constant")
+}
+menu(asynAUTOCONNECT) {
+    choice(asynAUTOCONNECT_noAutoConnect, "noAutoConnect")
+    choice(asynAUTOCONNECT_autoConnect, "autoConnect")
+}
+menu(asynFMT) {
+    choice(asynFMT_ASCII, "ASCII")
+    choice(asynFMT_Hybrid, "Hybrid")
+    choice(asynFMT_Binary, "Binary")
+}
+menu(seqSELM) {
+    choice(seqSELM_All, "All")
+    choice(seqSELM_Specified, "Specified")
+    choice(seqSELM_Mask, "Mask")
+}
+menu(asynCONNECT) {
+    choice(asynCONNECT_Disconnect, "Disconnect")
+    choice(asynCONNECT_Connect, "Connect")
+}
+menu(transformIAV) {
+    choice(transformIAV_EXT_NC, "Ext PV NC")
+    choice(transformIAV_EXT, "Ext PV OK")
+    choice(transformIAV_LOC, "Local PV")
+    choice(transformIAV_CON, "Constant")
+}
+menu(serialBAUD) {
+    choice(serialBAUD_unknown, "Unknown")
+    choice(serialBAUD_300, "300")
+    choice(serialBAUD_600, "600")
+    choice(serialBAUD_1200, "1200")
+    choice(serialBAUD_2400, "2400")
+    choice(serialBAUD_4800, "4800")
+    choice(serialBAUD_9600, "9600")
+    choice(serialBAUD_19200, "19200")
+    choice(serialBAUD_38400, "38400")
+    choice(serialBAUD_57600, "57600")
+    choice(serialBAUD_115200, "115200")
+    choice(serialBAUD_230400, "230400")
+    choice(serialBAUD_460800, "460800")
+    choice(serialBAUD_576000, "576000")
+    choice(serialBAUD_921600, "921600")
+    choice(serialBAUD_1152000, "1152000")
+}
+menu(histogramCMD) {
+    choice(histogramCMD_Read, "Read")
+    choice(histogramCMD_Clear, "Clear")
+    choice(histogramCMD_Start, "Start")
+    choice(histogramCMD_Stop, "Stop")
+}
+menu(asynTRACE) {
+    choice(asynTRACE_Off, "Off")
+    choice(asynTRACE_On, "On")
+}
+menu(asynEOMREASON) {
+    choice(asynEOMREASONNone, "None")
+    choice(asynEOMREASONCNT, "Count")
+    choice(asynEOMREASONEOS, "Eos")
+    choice(asynEOMREASONCNTEOS, "Count Eos")
+    choice(asynEOMREASONEND, "End")
+    choice(asynEOMREASONCNTEND, "Count End")
+    choice(asynEOMREASONEOSEND, "Eos End")
+    choice(asynEOMREASONCNTEOSEND, "Count Eos End")
+}
+menu(menuIvoa) {
+    choice(menuIvoaContinue_normally, "Continue normally")
+    choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs")
+    choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV")
+}
+menu(acalcoutDOPT) {
+    choice(acalcoutDOPT_Use_VAL, "Use CALC")
+    choice(acalcoutDOPT_Use_OVAL, "Use OCAL")
+}
+menu(stringoutPOST) {
+    choice(stringoutPOST_OnChange, "On Change")
+    choice(stringoutPOST_Always, "Always")
+}
+menu(menuAlarmSevr) {
+    choice(menuAlarmSevrNO_ALARM, "NO_ALARM")
+    choice(menuAlarmSevrMINOR, "MINOR")
+    choice(menuAlarmSevrMAJOR, "MAJOR")
+    choice(menuAlarmSevrINVALID, "INVALID")
+}
+menu(acalcoutINAV) {
+    choice(acalcoutINAV_EXT_NC, "Ext PV NC")
+    choice(acalcoutINAV_EXT, "Ext PV OK")
+    choice(acalcoutINAV_LOC, "Local PV")
+    choice(acalcoutINAV_CON, "Constant")
+}
+menu(menuSimm) {
+    choice(menuSimmNO, "NO")
+    choice(menuSimmYES, "YES")
+    choice(menuSimmRAW, "RAW")
+}
+menu(swaitDOPT) {
+    choice(swaitDOPT_Use_VAL, "Use VAL")
+    choice(swaitDOPT_Use_DOL, "Use DOL")
+}
+menu(menuConvert) {
+    choice(menuConvertNO_CONVERSION, "NO CONVERSION")
+    choice(menuConvertSLOPE, "SLOPE")
+    choice(menuConvertLINEAR, "LINEAR")
+    choice(menuConverttypeKdegF, "typeKdegF")
+    choice(menuConverttypeKdegC, "typeKdegC")
+    choice(menuConverttypeJdegF, "typeJdegF")
+    choice(menuConverttypeJdegC, "typeJdegC")
+    choice(menuConverttypeEdegF, "typeEdegF(ixe only)")
+    choice(menuConverttypeEdegC, "typeEdegC(ixe only)")
+    choice(menuConverttypeTdegF, "typeTdegF")
+    choice(menuConverttypeTdegC, "typeTdegC")
+    choice(menuConverttypeRdegF, "typeRdegF")
+    choice(menuConverttypeRdegC, "typeRdegC")
+    choice(menuConverttypeSdegF, "typeSdegF")
+    choice(menuConverttypeSdegC, "typeSdegC")
+}
+menu(scalcoutOOPT) {
+    choice(scalcoutOOPT_Every_Time, "Every Time")
+    choice(scalcoutOOPT_On_Change, "On Change")
+    choice(scalcoutOOPT_When_Zero, "When Zero")
+    choice(scalcoutOOPT_When_Non_zero, "When Non-zero")
+    choice(scalcoutOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(scalcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+    choice(scalcoutOOPT_Never, "Never")
+}
+menu(serialDBIT) {
+    choice(serialDBIT_unknown, "Unknown")
+    choice(serialDBIT_5, "5")
+    choice(serialDBIT_6, "6")
+    choice(serialDBIT_7, "7")
+    choice(serialDBIT_8, "8")
+}
+menu(selSELM) {
+    choice(selSELM_Specified, "Specified")
+    choice(selSELM_High_Signal, "High Signal")
+    choice(selSELM_Low_Signal, "Low Signal")
+    choice(selSELM_Median_Signal, "Median Signal")
+}
+menu(aaoPOST) {
+    choice(aaoPOST_Always, "Always")
+    choice(aaoPOST_OnChange, "On Change")
+}
+menu(serialPRTY) {
+    choice(serialPRTY_unknown, "Unknown")
+    choice(serialPRTY_None, "None")
+    choice(serialPRTY_Even, "Even")
+    choice(serialPRTY_Odd, "Odd")
+}
+menu(menuPriority) {
+    choice(menuPriorityLOW, "LOW")
+    choice(menuPriorityMEDIUM, "MEDIUM")
+    choice(menuPriorityHIGH, "HIGH")
+}
+menu(serialSBIT) {
+    choice(serialSBIT_unknown, "Unknown")
+    choice(serialSBIT_1, "1")
+    choice(serialSBIT_2, "2")
+}
+menu(menuOmsl) {
+    choice(menuOmslsupervisory, "supervisory")
+    choice(menuOmslclosed_loop, "closed_loop")
+}
+menu(stringinPOST) {
+    choice(stringinPOST_OnChange, "On Change")
+    choice(stringinPOST_Always, "Always")
+}
+menu(dfanoutSELM) {
+    choice(dfanoutSELM_All, "All")
+    choice(dfanoutSELM_Specified, "Specified")
+    choice(dfanoutSELM_Mask, "Mask")
+}
+menu(gpibACMD) {
+    choice(gpibACMD_None, "None")
+    choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)")
+    choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)")
+    choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)")
+    choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)")
+    choice(gpibACMD_Serial_Poll, "Serial Poll")
+}
+menu(asynTMOD) {
+    choice(asynTMOD_Write_Read, "Write/Read")
+    choice(asynTMOD_Write, "Write")
+    choice(asynTMOD_Read, "Read")
+    choice(asynTMOD_Flush, "Flush")
+    choice(asynTMOD_NoIO, "NoI/O")
+}
+menu(transformIVLA) {
+    choice(transformIVLA_IGNORE, "Ignore error")
+    choice(transformIVLA_DO_NOTHING, "Do Nothing")
+}
+menu(acalcoutOOPT) {
+    choice(acalcoutOOPT_Every_Time, "Every Time")
+    choice(acalcoutOOPT_On_Change, "On Change")
+    choice(acalcoutOOPT_When_Zero, "When Zero")
+    choice(acalcoutOOPT_When_Non_zero, "When Non-zero")
+    choice(acalcoutOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(acalcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+    choice(acalcoutOOPT_Never, "Never")
+}
+menu(asynINTERFACE) {
+    choice(asynINTERFACE_OCTET, "asynOctet")
+    choice(asynINTERFACE_INT32, "asynInt32")
+    choice(asynINTERFACE_UINT32, "asynUInt32Digital")
+    choice(asynINTERFACE_FLOAT64, "asynFloat64")
+}
+menu(aaiPOST) {
+    choice(aaiPOST_Always, "Always")
+    choice(aaiPOST_OnChange, "On Change")
+}
+menu(scalcoutDOPT) {
+    choice(scalcoutDOPT_Use_VAL, "Use CALC")
+    choice(scalcoutDOPT_Use_OVAL, "Use OCAL")
+}
+menu(gpibUCMD) {
+    choice(gpibUCMD_None, "None")
+    choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)")
+    choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)")
+    choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)")
+    choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)")
+    choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)")
+    choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)")
+}
+menu(swaitOOPT) {
+    choice(swaitOOPT_Every_Time, "Every Time")
+    choice(swaitOOPT_On_Change, "On Change")
+    choice(swaitOOPT_When_Zero, "When Zero")
+    choice(swaitOOPT_When_Non_zero, "When Non-zero")
+    choice(swaitOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(swaitOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+    choice(swaitOOPT_Never, "Never")
+}
+menu(sseqSELM) {
+    choice(sseqSELM_All, "All")
+    choice(sseqSELM_Specified, "Specified")
+    choice(sseqSELM_Mask, "Mask")
+}
+menu(serialMCTL) {
+    choice(serialMCTL_unknown, "Unknown")
+    choice(serialMCTL_CLOCAL, "CLOCAL")
+    choice(serialMCTL_Yes, "YES")
+}
+menu(scalcoutINAP) {
+    choice(scalcoutINAP_No, "No PROC on Change")
+    choice(scalcoutINAP_Yes, "PROC on Change")
+}
+menu(compressALG) {
+    choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value")
+    choice(compressALG_N_to_1_High_Value, "N to 1 High Value")
+    choice(compressALG_N_to_1_Average, "N to 1 Average")
+    choice(compressALG_Average, "Average")
+    choice(compressALG_Circular_Buffer, "Circular Buffer")
+    choice(compressALG_N_to_1_Median, "N to 1 Median")
+}
+menu(serialFCTL) {
+    choice(serialFCTL_unknown, "Unknown")
+    choice(serialFCTL_None, "None")
+    choice(serialFCTL_Hardware, "Hardware")
+}
+menu(sseqLNKV) {
+    choice(sseqLNKV_EXT_NC, "Ext PV NC")
+    choice(sseqLNKV_EXT, "Ext PV OK")
+    choice(sseqLNKV_LOC, "Local PV")
+    choice(sseqLNKV_CON, "Constant")
+}
+menu(fanoutSELM) {
+    choice(fanoutSELM_All, "All")
+    choice(fanoutSELM_Specified, "Specified")
+    choice(fanoutSELM_Mask, "Mask")
+}
+menu(aSubEFLG) {
+    choice(aSubEFLG_NEVER, "NEVER")
+    choice(aSubEFLG_ON_CHANGE, "ON CHANGE")
+    choice(aSubEFLG_ALWAYS, "ALWAYS")
+}
+menu(calcoutOOPT) {
+    choice(calcoutOOPT_Every_Time, "Every Time")
+    choice(calcoutOOPT_On_Change, "On Change")
+    choice(calcoutOOPT_When_Zero, "When Zero")
+    choice(calcoutOOPT_When_Non_zero, "When Non-zero")
+    choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+}
+menu(asynENABLE) {
+    choice(asynENABLE_Disable, "Disable")
+    choice(asynENABLE_Enable, "Enable")
+}
+menu(serialIX) {
+    choice(serialIX_unknown, "Unknown")
+    choice(serialIX_No, "No")
+    choice(serialIX_Yes, "Yes")
+}
+menu(menuYesNo) {
+    choice(menuYesNoNO, "NO")
+    choice(menuYesNoYES, "YES")
+}
+recordtype(sseq) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Used to trigger")
+    }
+    field(SELM, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(sseqSELM)
+        interest(1)
+        prompt("Select Mechanism")
+    }
+    field(SELN, DBF_USHORT) {
+        initial("1")
+        interest(1)
+        prompt("Link Selection")
+    }
+    field(SELL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Link Selection Loc")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(DLY1, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 1")
+    }
+    field(DOL1, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link1")
+    }
+    field(DO1, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 1")
+    }
+    field(LNK1, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 1")
+    }
+    field(STR1, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 1")
+    }
+    field(DT1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT1, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("0")
+        interest(2)
+    }
+    field(DOL1V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK1V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY2, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 2")
+    }
+    field(DOL2, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 2")
+    }
+    field(DO2, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 2")
+    }
+    field(LNK2, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 2")
+    }
+    field(STR2, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 2")
+    }
+    field(DT2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT2, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(2)
+    }
+    field(DOL2V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK2V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY3, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 3")
+    }
+    field(DOL3, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 3")
+    }
+    field(DO3, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 3")
+    }
+    field(LNK3, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 3")
+    }
+    field(STR3, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 3")
+    }
+    field(DT3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT3, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("2")
+        interest(2)
+    }
+    field(DOL3V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK3V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY4, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 4")
+    }
+    field(DOL4, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 4")
+    }
+    field(DO4, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 4")
+    }
+    field(LNK4, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 4")
+    }
+    field(STR4, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 4")
+    }
+    field(DT4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT4, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("3")
+        interest(2)
+    }
+    field(DOL4V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK4V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY5, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 5")
+    }
+    field(DOL5, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 5")
+    }
+    field(DO5, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 5")
+    }
+    field(LNK5, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 5")
+    }
+    field(STR5, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 5")
+    }
+    field(DT5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT5, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("4")
+        interest(2)
+    }
+    field(DOL5V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK5V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY6, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 6")
+    }
+    field(DOL6, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 6")
+    }
+    field(DO6, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 6")
+    }
+    field(LNK6, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 6")
+    }
+    field(STR6, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 6")
+    }
+    field(DT6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT6, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("5")
+        interest(2)
+    }
+    field(DOL6V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK6V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY7, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 7")
+    }
+    field(DOL7, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 7")
+    }
+    field(DO7, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 7")
+    }
+    field(LNK7, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 7")
+    }
+    field(STR7, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 7")
+    }
+    field(DT7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT7, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("6")
+        interest(2)
+    }
+    field(DOL7V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK7V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY8, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 8")
+    }
+    field(DOL8, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 8")
+    }
+    field(DO8, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 8")
+    }
+    field(LNK8, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 8")
+    }
+    field(STR8, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 8")
+    }
+    field(DT8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT8, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("7")
+        interest(2)
+    }
+    field(DOL8V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK8V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY9, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 9")
+    }
+    field(DOL9, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 9")
+    }
+    field(DO9, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 9")
+    }
+    field(LNK9, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 9")
+    }
+    field(STR9, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 9")
+    }
+    field(DT9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT9, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("8")
+        interest(2)
+    }
+    field(DOL9V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK9V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLYA, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 10")
+    }
+    field(DOLA, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 10")
+    }
+    field(DOA, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 10")
+    }
+    field(LNKA, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 10")
+    }
+    field(STRA, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value A")
+    }
+    field(DTA, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LTA, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAITA, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERRA, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTGA, DBF_SHORT) {
+        interest(1)
+    }
+    field(IXA, DBF_SHORT) {
+        initial("9")
+        interest(2)
+    }
+    field(DOLAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNKAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(ABORT, DBF_SHORT) {
+        special(SPC_MOD)
+        interest(1)
+        prompt("Abort sequence")
+    }
+    field(ABORTING, DBF_SHORT) {
+        special(SPC_MOD)
+        interest(1)
+        prompt("Aborting")
+    }
+    field(BUSY, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Sequence active")
+    }
+}
+recordtype(calcout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %#include "dbScan.h"
+    %#include "postfix.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rpvtStruct *rpvt")
+        interest(4)
+        prompt("Record Private")
+    }
+    field(VAL, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        asl(ASL0)
+        prompt("Result")
+    }
+    field(PVAL, DBF_DOUBLE) {
+        prompt("Previous Value")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_CALC)
+        initial("0")
+        pp(TRUE)
+        size(80)
+        prompt("Calculation")
+    }
+    field(CLCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Valid")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input L")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(INAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPA PV Status")
+    }
+    field(INBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPB PV Status")
+    }
+    field(INCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPC PV Status")
+    }
+    field(INDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPD PV Status")
+    }
+    field(INEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPE PV Status")
+    }
+    field(INFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPF PV Status")
+    }
+    field(INGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPG PV Status")
+    }
+    field(INHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPH PV Status")
+    }
+    field(INIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPI PV Status")
+    }
+    field(INJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPJ PV Status")
+    }
+    field(INKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPK PV Status")
+    }
+    field(INLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPL PV Status")
+    }
+    field(OUTV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(calcoutINAV)
+        interest(1)
+        prompt("OUT PV Status")
+    }
+    field(OOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(calcoutOOPT)
+        interest(1)
+        prompt("Output Execute Opt")
+    }
+    field(ODLY, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("Output Execute Delay")
+    }
+    field(DLYA, DBF_USHORT) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("Output Delay Active")
+    }
+    field(DOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(calcoutDOPT)
+        interest(1)
+        prompt("Output Data Opt")
+    }
+    field(OCAL, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_CALC)
+        initial("0")
+        pp(TRUE)
+        size(80)
+        prompt("Output Calculation")
+    }
+    field(OCLV, DBF_LONG) {
+        interest(1)
+        prompt("OCAL Valid")
+    }
+    field(OEVT, DBF_STRING) {
+        promptgroup(GUI_CLOCK)
+        special(SPC_MOD)
+        asl(ASL0)
+        size(40)
+        prompt("Event To Issue")
+    }
+    field(EPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("EVENTPVT epvt")
+        interest(4)
+        prompt("Event private")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Output Value")
+    }
+    field(LA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(LB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(LC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(LD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(LE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(LF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(LG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(LH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(LI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(LK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(LL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(POVL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Prev Value of OVAL")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char	rpcl[INFIX_TO_POSTFIX_SIZE(80)]")
+        interest(4)
+        prompt("Reverse Polish Calc")
+    }
+    field(ORPC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char	orpc[INFIX_TO_POSTFIX_SIZE(80)]")
+        interest(4)
+        prompt("Reverse Polish OCalc")
+    }
+}
+device(calcout, CONSTANT, devCalcoutSoft, "Soft Channel")
+device(calcout, CONSTANT, devCalcoutSoftCallback, "Async Soft Channel")
+device(calcout, INST_IO, devcalcoutStream, "stream")
+recordtype(state) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_STRING) {
+        promptgroup(GUI_DISPLAY)
+        asl(ASL0)
+        pp(TRUE)
+        size(20)
+        prompt("Value")
+    }
+    field(OVAL, DBF_STRING) {
+        special(SPC_NOMOD)
+        interest(3)
+        size(20)
+        prompt("Prev Value")
+    }
+}
+recordtype(histogram) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *	val")
+        prompt("Value")
+    }
+    field(NELM, DBF_USHORT) {
+        promptgroup(GUI_HIST)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Num of Array Elements")
+    }
+    field(CSTA, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Collection Status")
+    }
+    field(CMD, DBF_MENU) {
+        special(SPC_CALC)
+        asl(ASL0)
+        menu(histogramCMD)
+        interest(1)
+        prompt("Collection Control")
+    }
+    field(ULIM, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_HIST)
+        special(SPC_RESET)
+        interest(1)
+        prompt("Upper Signal Limit")
+    }
+    field(LLIM, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_HIST)
+        special(SPC_RESET)
+        interest(1)
+        prompt("Lower Signal Limit ")
+    }
+    field(WDTH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Element Width")
+    }
+    field(SGNL, DBF_DOUBLE) {
+        special(SPC_MOD)
+        prompt("Signal Value")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(SVL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Signal Value Location")
+    }
+    field(BPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsUInt32 *bptr")
+        interest(4)
+        prompt("Buffer Pointer")
+    }
+    field(WDOG, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *  wdog")
+        interest(4)
+        prompt("Watchdog callback")
+    }
+    field(MDEL, DBF_SHORT) {
+        promptgroup(GUI_HIST)
+        interest(1)
+        prompt("Monitor Count Deadband")
+    }
+    field(MCNT, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Counts Since Monitor")
+    }
+    field(SDEL, DBF_DOUBLE) {
+        promptgroup(GUI_HIST)
+        special(SPC_RESET)
+        interest(1)
+        prompt("Monitor Seconds Dband")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_DOUBLE) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(HOPR, DBF_ULONG) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_ULONG) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+}
+device(histogram, CONSTANT, devHistogramSoft, "Soft Channel")
+recordtype(lsi) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %#include "devSup.h"
+    %
+    %/* Declare Device Support Entry Table */
+    %typedef struct lsidset {
+    %    long number;
+    %    DEVSUPFUN report;
+    %    DEVSUPFUN init;
+    %    DEVSUPFUN init_record;
+    %    DEVSUPFUN get_ioint_info;
+    %    DEVSUPFUN read_string;
+    %} lsidset;
+    %
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("char *val")
+        pp(TRUE)
+        prompt("Current Value")
+    }
+    field(OVAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *oval")
+        interest(3)
+        prompt("Old Value")
+    }
+    field(SIZV, DBF_USHORT) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_NOMOD)
+        initial("41")
+        interest(1)
+        prompt("Size of buffers")
+    }
+    field(LEN, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Length of VAL")
+    }
+    field(OLEN, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Length of OVAL")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(MPST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(menuPost)
+        interest(1)
+        prompt("Post Value Monitors")
+    }
+    field(APST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(menuPost)
+        interest(1)
+        prompt("Post Archive Monitors")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(2)
+        prompt("Simulation Mode Link")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(2)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Simulation Mode Severity")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(2)
+        prompt("Sim Input Specifctn")
+    }
+}
+device(lsi, CONSTANT, devLsiSoft, "Soft Channel")
+recordtype(seq) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Used to trigger")
+    }
+    field(SELM, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(seqSELM)
+        interest(1)
+        prompt("Select Mechanism")
+    }
+    field(SELN, DBF_USHORT) {
+        initial("1")
+        interest(1)
+        prompt("Link Selection")
+    }
+    field(SELL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Link Selection Loc")
+    }
+    field(OFFS, DBF_SHORT) {
+        initial("0")
+        interest(1)
+        prompt("Offset for Specified")
+    }
+    field(SHFT, DBF_SHORT) {
+        initial("-1")
+        interest(1)
+        prompt("Shift for Mask mode")
+    }
+    field(OLDN, DBF_USHORT) {
+        interest(4)
+        prompt("Old Selection")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(DLY0, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Delay 0")
+    }
+    field(DOL0, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Input link 0")
+    }
+    field(DO0, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 0")
+    }
+    field(LNK0, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Output Link 0")
+    }
+    field(DLY1, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Delay 1")
+    }
+    field(DOL1, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Input link1")
+    }
+    field(DO1, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 1")
+    }
+    field(LNK1, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Output Link 1")
+    }
+    field(DLY2, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Delay 2")
+    }
+    field(DOL2, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Input link 2")
+    }
+    field(DO2, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 2")
+    }
+    field(LNK2, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Output Link 2")
+    }
+    field(DLY3, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Delay 3")
+    }
+    field(DOL3, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Input link 3")
+    }
+    field(DO3, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 3")
+    }
+    field(LNK3, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        interest(1)
+        prompt("Output Link 3")
+    }
+    field(DLY4, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Delay 4")
+    }
+    field(DOL4, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Input link 4")
+    }
+    field(DO4, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 4")
+    }
+    field(LNK4, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Output Link 4")
+    }
+    field(DLY5, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Delay 5")
+    }
+    field(DOL5, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Input link 5")
+    }
+    field(DO5, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 5")
+    }
+    field(LNK5, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Output Link 5")
+    }
+    field(DLY6, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Delay 6")
+    }
+    field(DOL6, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Input link 6")
+    }
+    field(DO6, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 6")
+    }
+    field(LNK6, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        interest(1)
+        prompt("Output Link 6")
+    }
+    field(DLY7, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 7")
+    }
+    field(DOL7, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 7")
+    }
+    field(DO7, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 7")
+    }
+    field(LNK7, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 7")
+    }
+    field(DLY8, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 8")
+    }
+    field(DOL8, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 8")
+    }
+    field(DO8, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 8")
+    }
+    field(LNK8, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 8")
+    }
+    field(DLY9, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 9")
+    }
+    field(DOL9, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 9")
+    }
+    field(DO9, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 9")
+    }
+    field(LNK9, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 9")
+    }
+    field(DLYA, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 10")
+    }
+    field(DOLA, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 10")
+    }
+    field(DOA, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 10")
+    }
+    field(LNKA, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 10")
+    }
+    field(DLYB, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 11")
+    }
+    field(DOLB, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 11")
+    }
+    field(DOB, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 11")
+    }
+    field(LNKB, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 11")
+    }
+    field(DLYC, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 12")
+    }
+    field(DOLC, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 12")
+    }
+    field(DOC, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 12")
+    }
+    field(LNKC, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 12")
+    }
+    field(DLYD, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 13")
+    }
+    field(DOLD, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 13")
+    }
+    field(DOD, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 13")
+    }
+    field(LNKD, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 13")
+    }
+    field(DLYE, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 14")
+    }
+    field(DOLE, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 14")
+    }
+    field(DOE, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 14")
+    }
+    field(LNKE, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 14")
+    }
+    field(DLYF, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Delay 15")
+    }
+    field(DOLF, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Input link 15")
+    }
+    field(DOF, DBF_DOUBLE) {
+        interest(1)
+        prompt("Value 15")
+    }
+    field(LNKF, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        interest(1)
+        prompt("Output Link 15")
+    }
+}
+recordtype(stringout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_STRING) {
+        promptgroup(GUI_OUTPUT)
+        asl(ASL0)
+        pp(TRUE)
+        size(40)
+        prompt("Current Value")
+    }
+    field(OVAL, DBF_STRING) {
+        special(SPC_NOMOD)
+        interest(3)
+        size(40)
+        prompt("Previous Value")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Desired Output Loc")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuOmsl)
+        interest(1)
+        prompt("Output Mode Select")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(MPST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(stringoutPOST)
+        interest(1)
+        prompt("Post Value Monitors")
+    }
+    field(APST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(stringoutPOST)
+        interest(1)
+        prompt("Post Archive Monitors")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_STRING) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        size(40)
+        prompt("INVALID output value")
+    }
+}
+device(stringout, CONSTANT, devSoSoft, "Soft Channel")
+device(stringout, CONSTANT, devSoSoftCallback, "Async Soft Channel")
+device(stringout, INST_IO, devSoStdio, "stdio")
+device(stringout, INST_IO, asynSoOctetWrite, "asynOctetWrite")
+device(stringout, INST_IO, devstringoutStream, "stream")
+recordtype(aai) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *		val")
+        pp(TRUE)
+        prompt("Value")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_BITS1)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_BITS2)
+        interest(1)
+        size(16)
+        prompt("Engineering Units Name")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(NELM, DBF_ULONG) {
+        promptgroup(GUI_COMPRESS)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Number of Elements")
+    }
+    field(FTVL, DBF_MENU) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        interest(1)
+        prompt("Field Type of Value")
+    }
+    field(NORD, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Number elements read")
+    }
+    field(BPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *		bptr")
+        interest(4)
+        prompt("Buffer Pointer")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_HIST)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(MPST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(aaiPOST)
+        interest(1)
+        prompt("Post Value Monitors")
+    }
+    field(APST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(aaiPOST)
+        interest(1)
+        prompt("Post Archive Monitors")
+    }
+    field(HASH, DBF_ULONG) {
+        interest(3)
+        prompt("Hash of OnChange data.")
+    }
+}
+device(aai, CONSTANT, devAaiSoft, "Soft Channel")
+device(aai, INST_IO, devaaiStream, "stream")
+recordtype(permissive) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(LABL, DBF_STRING) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        pp(TRUE)
+        size(20)
+        prompt("Button Label")
+    }
+    field(VAL, DBF_USHORT) {
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Status")
+    }
+    field(OVAL, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Old Status")
+    }
+    field(WFLG, DBF_USHORT) {
+        pp(TRUE)
+        prompt("Wait Flag")
+    }
+    field(OFLG, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Old Flag")
+    }
+}
+recordtype(bo) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_ENUM) {
+        promptgroup(GUI_OUTPUT)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Current Value")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuOmsl)
+        interest(1)
+        prompt("Output Mode Select")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Desired Output Loc")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Seconds to Hold High")
+    }
+    field(ZNAM, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Zero Name")
+    }
+    field(ONAM, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("One Name")
+    }
+    field(RVAL, DBF_ULONG) {
+        pp(TRUE)
+        prompt("Raw Value")
+    }
+    field(ORAW, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("prev Raw Value")
+    }
+    field(MASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Hardware Mask")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *  rpvt")
+        interest(4)
+        prompt("Record Private")
+    }
+    field(WDPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *	wdpt")
+        interest(4)
+        prompt("Watch Dog Timer ID")
+    }
+    field(ZSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Zero Error Severity")
+    }
+    field(OSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("One Error Severity")
+    }
+    field(COSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Change of State Sevr")
+    }
+    field(RBV, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Readback Value")
+    }
+    field(ORBV, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Readback Value")
+    }
+    field(MLST, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Monitored")
+    }
+    field(LALM, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID outpt action")
+    }
+    field(IVOV, DBF_USHORT) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+}
+device(bo, CONSTANT, devBoSoft, "Soft Channel")
+device(bo, CONSTANT, devBoSoftRaw, "Raw Soft Channel")
+device(bo, CONSTANT, devBoSoftCallback, "Async Soft Channel")
+device(bo, INST_IO, devBoGeneralTime, "General Time")
+device(bo, INST_IO, devBoDbState, "Db State")
+device(bo, INST_IO, asynBoInt32, "asynInt32")
+device(bo, INST_IO, asynBoUInt32Digital, "asynUInt32Digital")
+device(bo, INST_IO, devboStream, "stream")
+recordtype(dfanout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_DOUBLE) {
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Desired Output")
+    }
+    field(SELM, DBF_MENU) {
+        promptgroup(GUI_LINKS)
+        menu(dfanoutSELM)
+        interest(1)
+        prompt("Select Mechanism")
+    }
+    field(SELN, DBF_USHORT) {
+        initial("1")
+        interest(1)
+        prompt("Link Selection")
+    }
+    field(SELL, DBF_INLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Link Selection Loc")
+    }
+    field(OUTA, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec A")
+    }
+    field(OUTB, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec B")
+    }
+    field(OUTC, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec C")
+    }
+    field(OUTD, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec D")
+    }
+    field(OUTE, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec E")
+    }
+    field(OUTF, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec F")
+    }
+    field(OUTG, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec G")
+    }
+    field(OUTH, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Spec H")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Desired Output Loc")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuOmsl)
+        interest(1)
+        prompt("Output Mode Select")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units name")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+}
+recordtype(mbbi) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_ENUM) {
+        promptgroup(GUI_INPUTS)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Current Value")
+    }
+    field(NOBT, DBF_SHORT) {
+        promptgroup(GUI_MBB)
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Number of Bits")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(ZRVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Zero Value")
+    }
+    field(ONVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("One Value")
+    }
+    field(TWVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Two Value")
+    }
+    field(THVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Three Value")
+    }
+    field(FRVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Four Value")
+    }
+    field(FVVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Five Value")
+    }
+    field(SXVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Six Value")
+    }
+    field(SVVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Seven Value")
+    }
+    field(EIVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Eight Value")
+    }
+    field(NIVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Nine Value")
+    }
+    field(TEVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Ten Value")
+    }
+    field(ELVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Eleven Value")
+    }
+    field(TVVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Twelve Value")
+    }
+    field(TTVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Thirteen Value")
+    }
+    field(FTVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Fourteen Value")
+    }
+    field(FFVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Fifteen Value")
+    }
+    field(ZRST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Zero String")
+    }
+    field(ONST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("One String")
+    }
+    field(TWST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Two String")
+    }
+    field(THST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Three String")
+    }
+    field(FRST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Four String")
+    }
+    field(FVST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Five String")
+    }
+    field(SXST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Six String")
+    }
+    field(SVST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Seven String")
+    }
+    field(EIST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Eight String")
+    }
+    field(NIST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Nine String")
+    }
+    field(TEST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Ten String")
+    }
+    field(ELST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Eleven String")
+    }
+    field(TVST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Twelve String")
+    }
+    field(TTST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Thirteen String")
+    }
+    field(FTST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Fourteen String")
+    }
+    field(FFST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Fifteen String")
+    }
+    field(ZRSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Zero Severity")
+    }
+    field(ONSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State One Severity")
+    }
+    field(TWSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Two Severity")
+    }
+    field(THSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Three Severity")
+    }
+    field(FRSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Four Severity")
+    }
+    field(FVSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Five Severity")
+    }
+    field(SXSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Six Severity")
+    }
+    field(SVSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Seven Severity")
+    }
+    field(EISV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Eight Severity")
+    }
+    field(NISV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Nine Severity")
+    }
+    field(TESV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Ten Severity")
+    }
+    field(ELSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Eleven Severity")
+    }
+    field(TVSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Twelve Severity")
+    }
+    field(TTSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Thirteen Sevr")
+    }
+    field(FTSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Fourteen Sevr")
+    }
+    field(FFSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Fifteen Severity")
+    }
+    field(AFTC, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Filter Time Constant")
+    }
+    field(AFVL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Alarm Filter Value")
+    }
+    field(UNSV, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Unknown State Severity")
+    }
+    field(COSV, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Change of State Svr")
+    }
+    field(RVAL, DBF_ULONG) {
+        pp(TRUE)
+        prompt("Raw Value")
+    }
+    field(ORAW, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Raw Value")
+    }
+    field(MASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Hardware Mask")
+    }
+    field(MLST, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Monitored")
+    }
+    field(LALM, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(SDEF, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("States Defined")
+    }
+    field(SHFT, DBF_USHORT) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Shift")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_ULONG) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuSimm)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+}
+device(mbbi, CONSTANT, devMbbiSoft, "Soft Channel")
+device(mbbi, CONSTANT, devMbbiSoftRaw, "Raw Soft Channel")
+device(mbbi, CONSTANT, devMbbiSoftCallback, "Async Soft Channel")
+device(mbbi, INST_IO, asynMbbiInt32, "asynInt32")
+device(mbbi, INST_IO, asynMbbiUInt32Digital, "asynUInt32Digital")
+device(mbbi, INST_IO, devmbbiStream, "stream")
+recordtype(event) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %#include "dbScan.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_STRING) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        asl(ASL0)
+        size(40)
+        prompt("Event Name To Post")
+    }
+    field(EPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("EVENTPVT epvt")
+        interest(4)
+        prompt("Event private")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_STRING) {
+        size(40)
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+}
+device(event, CONSTANT, devEventSoft, "Soft Channel")
+recordtype(compress) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *		val")
+        pp(TRUE)
+        prompt("Value")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_COMPRESS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(RES, DBF_SHORT) {
+        special(SPC_RESET)
+        asl(ASL0)
+        interest(3)
+        prompt("Reset")
+    }
+    field(ALG, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_RESET)
+        menu(compressALG)
+        interest(1)
+        prompt("Compression Algorithm")
+    }
+    field(NSAM, DBF_ULONG) {
+        promptgroup(GUI_COMPRESS)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Number of Values")
+    }
+    field(N, DBF_ULONG) {
+        promptgroup(GUI_COMPRESS)
+        special(SPC_RESET)
+        initial("1")
+        interest(1)
+        prompt("N to 1 Compression")
+    }
+    field(IHIL, DBF_DOUBLE) {
+        promptgroup(GUI_COMPRESS)
+        interest(1)
+        prompt("Init High Interest Lim")
+    }
+    field(ILIL, DBF_DOUBLE) {
+        promptgroup(GUI_COMPRESS)
+        interest(1)
+        prompt("Init Low Interest Lim")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("EngineeringUnits")
+    }
+    field(OFF, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Offset")
+    }
+    field(NUSE, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Number Used")
+    }
+    field(OUSE, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Old Number Used")
+    }
+    field(BPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("double		*bptr")
+        interest(4)
+        prompt("Buffer Pointer")
+    }
+    field(SPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("double		*sptr")
+        interest(4)
+        prompt("Summing Buffer Ptr")
+    }
+    field(WPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("double		*wptr")
+        interest(4)
+        prompt("Working Buffer Ptr")
+    }
+    field(INPN, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("Number of elements in Working Buffer")
+    }
+    field(CVB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Compress Value Buffer")
+    }
+    field(INX, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Compressed Array Inx")
+    }
+}
+recordtype(mbbo) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_ENUM) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_DBADDR)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Desired Value")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Desired Output Loc")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuOmsl)
+        interest(1)
+        prompt("Output Mode Select")
+    }
+    field(NOBT, DBF_SHORT) {
+        promptgroup(GUI_MBB)
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Number of Bits")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(ZRVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Zero Value")
+    }
+    field(ONVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("One Value")
+    }
+    field(TWVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Two Value")
+    }
+    field(THVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Three Value")
+    }
+    field(FRVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Four Value")
+    }
+    field(FVVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Five Value")
+    }
+    field(SXVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Six Value")
+    }
+    field(SVVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Seven Value")
+    }
+    field(EIVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Eight Value")
+    }
+    field(NIVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Nine Value")
+    }
+    field(TEVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Ten Value")
+    }
+    field(ELVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Eleven Value")
+    }
+    field(TVVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Twelve Value")
+    }
+    field(TTVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Thirteen Value")
+    }
+    field(FTVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Fourteen Value")
+    }
+    field(FFVL, DBF_ULONG) {
+        base(HEX)
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Fifteen Value")
+    }
+    field(ZRST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Zero String")
+    }
+    field(ONST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("One String")
+    }
+    field(TWST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Two String")
+    }
+    field(THST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Three String")
+    }
+    field(FRST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Four String")
+    }
+    field(FVST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Five String")
+    }
+    field(SXST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Six String")
+    }
+    field(SVST, DBF_STRING) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Seven String")
+    }
+    field(EIST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Eight String")
+    }
+    field(NIST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Nine String")
+    }
+    field(TEST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Ten String")
+    }
+    field(ELST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Eleven String")
+    }
+    field(TVST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Twelve String")
+    }
+    field(TTST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Thirteen String")
+    }
+    field(FTST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Fourteen String")
+    }
+    field(FFST, DBF_STRING) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Fifteen String")
+    }
+    field(ZRSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Zero Severity")
+    }
+    field(ONSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State One Severity")
+    }
+    field(TWSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Two Severity")
+    }
+    field(THSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Three Severity")
+    }
+    field(FRSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Four Severity")
+    }
+    field(FVSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Five Severity")
+    }
+    field(SXSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Six Severity")
+    }
+    field(SVSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Seven Severity")
+    }
+    field(EISV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Eight Severity")
+    }
+    field(NISV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Nine Severity")
+    }
+    field(TESV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Ten Severity")
+    }
+    field(ELSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Eleven Severity")
+    }
+    field(TVSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Twelve Severity")
+    }
+    field(TTSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Thirteen Sevr")
+    }
+    field(FTSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Fourteen Sevr")
+    }
+    field(FFSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("State Fifteen Sevr")
+    }
+    field(UNSV, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Unknown State Sevr")
+    }
+    field(COSV, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Change of State Sevr")
+    }
+    field(RVAL, DBF_ULONG) {
+        pp(TRUE)
+        prompt("Raw Value")
+    }
+    field(ORAW, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Raw Value")
+    }
+    field(RBV, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Readback Value")
+    }
+    field(ORBV, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Readback Value")
+    }
+    field(MASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Hardware Mask")
+    }
+    field(MLST, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Monitored")
+    }
+    field(LALM, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(SDEF, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("States Defined")
+    }
+    field(SHFT, DBF_USHORT) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Shift")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID outpt action")
+    }
+    field(IVOV, DBF_USHORT) {
+        promptgroup(GUI_MBB)
+        interest(2)
+        prompt("INVALID output value")
+    }
+}
+device(mbbo, CONSTANT, devMbboSoft, "Soft Channel")
+device(mbbo, CONSTANT, devMbboSoftRaw, "Raw Soft Channel")
+device(mbbo, CONSTANT, devMbboSoftCallback, "Async Soft Channel")
+device(mbbo, INST_IO, asynMbboInt32, "asynInt32")
+device(mbbo, INST_IO, asynMbboUInt32Digital, "asynUInt32Digital")
+device(mbbo, INST_IO, devmbboStream, "stream")
+recordtype(ao) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Desired Output")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        prompt("Output Value")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(OROC, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Rate of Change")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Desired Output Loc")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuOmsl)
+        interest(1)
+        prompt("Output Mode Select")
+    }
+    field(OIF, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(aoOIF)
+        interest(1)
+        prompt("Out Full/Incremental")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(LINR, DBF_MENU) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_LINCONV)
+        menu(menuConvert)
+        interest(1)
+        pp(TRUE)
+        prompt("Linearization")
+    }
+    field(EGUF, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_LINCONV)
+        interest(1)
+        pp(TRUE)
+        prompt("Eng Units Full")
+    }
+    field(EGUL, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_LINCONV)
+        interest(1)
+        pp(TRUE)
+        prompt("Eng Units Low")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Engineering Units")
+    }
+    field(ROFF, DBF_ULONG) {
+        interest(2)
+        pp(TRUE)
+        prompt("Raw Offset")
+    }
+    field(EOFF, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        interest(2)
+        pp(TRUE)
+        prompt("EGU to Raw Offset")
+    }
+    field(ESLO, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        initial("1")
+        interest(2)
+        pp(TRUE)
+        prompt("EGU to Raw Slope")
+    }
+    field(DRVH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        pp(TRUE)
+        prompt("Drive High Limit")
+    }
+    field(DRVL, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        pp(TRUE)
+        prompt("Drive Low Limit")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(AOFF, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        interest(1)
+        pp(TRUE)
+        prompt("Adjustment Offset")
+    }
+    field(ASLO, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        interest(1)
+        pp(TRUE)
+        prompt("Adjustment Slope")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(RVAL, DBF_LONG) {
+        pp(TRUE)
+        prompt("Current Raw Value")
+    }
+    field(ORAW, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Previous Raw Value")
+    }
+    field(RBV, DBF_LONG) {
+        special(SPC_NOMOD)
+        prompt("Readback Value")
+    }
+    field(ORBV, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Readback Value")
+    }
+    field(PVAL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Previous value")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(PBRK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *   pbrk")
+        interest(4)
+        prompt("Ptrto brkTable")
+    }
+    field(INIT, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Initialized?")
+    }
+    field(LBRK, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("LastBreak Point")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+    field(OMOD, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        prompt("Was OVAL modified?")
+    }
+}
+device(ao, CONSTANT, devAoSoft, "Soft Channel")
+device(ao, CONSTANT, devAoSoftRaw, "Raw Soft Channel")
+device(ao, CONSTANT, devAoSoftCallback, "Async Soft Channel")
+device(ao, INST_IO, asynAoInt32, "asynInt32")
+device(ao, INST_IO, asynAoFloat64, "asynFloat64")
+device(ao, INST_IO, devaoStream, "stream")
+recordtype(aao) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *		val")
+        pp(TRUE)
+        prompt("Value")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_BITS1)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_BITS2)
+        interest(1)
+        size(16)
+        prompt("Engineering Units Name")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(NELM, DBF_ULONG) {
+        promptgroup(GUI_COMPRESS)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Number of Elements")
+    }
+    field(FTVL, DBF_MENU) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        interest(1)
+        prompt("Field Type of Value")
+    }
+    field(NORD, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Number elements read")
+    }
+    field(BPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *		bptr")
+        interest(4)
+        prompt("Buffer Pointer")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_HIST)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+    field(MPST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(aaoPOST)
+        interest(1)
+        prompt("Post Value Monitors")
+    }
+    field(APST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(aaoPOST)
+        interest(1)
+        prompt("Post Archive Monitors")
+    }
+    field(HASH, DBF_ULONG) {
+        interest(3)
+        prompt("Hash of OnChange data.")
+    }
+}
+device(aao, CONSTANT, devAaoSoft, "Soft Channel")
+device(aao, INST_IO, devaaoStream, "stream")
+recordtype(mbbiDirect) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_USHORT) {
+        promptgroup(GUI_INPUTS)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Current Value")
+    }
+    field(NOBT, DBF_SHORT) {
+        promptgroup(GUI_MBB)
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Number of Bits")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(RVAL, DBF_ULONG) {
+        pp(TRUE)
+        prompt("Raw Value")
+    }
+    field(ORAW, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Raw Value")
+    }
+    field(MASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Hardware Mask")
+    }
+    field(MLST, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Monitored")
+    }
+    field(SHFT, DBF_USHORT) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Shift")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_ULONG) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuSimm)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(B0, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 0")
+    }
+    field(B1, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 1")
+    }
+    field(B2, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 2")
+    }
+    field(B3, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 3")
+    }
+    field(B4, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 4")
+    }
+    field(B5, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 5")
+    }
+    field(B6, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 6")
+    }
+    field(B7, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 7")
+    }
+    field(B8, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 8")
+    }
+    field(B9, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 9")
+    }
+    field(BA, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit A")
+    }
+    field(BB, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit B")
+    }
+    field(BC, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit C")
+    }
+    field(BD, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit D")
+    }
+    field(BE, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit E")
+    }
+    field(BF, DBF_UCHAR) {
+        interest(1)
+        pp(TRUE)
+        prompt("Bit F")
+    }
+}
+device(mbbiDirect, CONSTANT, devMbbiDirectSoft, "Soft Channel")
+device(mbbiDirect, CONSTANT, devMbbiDirectSoftRaw, "Raw Soft Channel")
+device(mbbiDirect, CONSTANT, devMbbiDirectSoftCallback, "Async Soft Channel")
+device(mbbiDirect, INST_IO, asynMbbiDirectUInt32Digital, "asynUInt32Digital")
+device(mbbiDirect, INST_IO, devmbbiDirectStream, "stream")
+recordtype(asyn) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        asl(ASL0)
+        interest(4)
+        prompt("Value field (unused)")
+    }
+    field(PORT, DBF_STRING) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        initial("")
+        interest(1)
+        size(40)
+        prompt("asyn port")
+    }
+    field(ADDR, DBF_LONG) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        initial("0")
+        interest(1)
+        prompt("asyn address")
+    }
+    field(PCNCT, DBF_MENU) {
+        special(SPC_MOD)
+        menu(asynCONNECT)
+        interest(2)
+        prompt("Port Connect/Disconnect")
+    }
+    field(DRVINFO, DBF_STRING) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        initial("")
+        interest(2)
+        size(40)
+        prompt("Driver info string")
+    }
+    field(REASON, DBF_LONG) {
+        special(SPC_MOD)
+        interest(2)
+        prompt("asynUser->reason")
+    }
+    field(TMOD, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(asynTMOD)
+        interest(1)
+        prompt("Transaction mode")
+    }
+    field(TMOT, DBF_DOUBLE) {
+        promptgroup(GUI_INPUTS)
+        initial("1.0")
+        interest(1)
+        prompt("Timeout (sec)")
+    }
+    field(IFACE, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(asynINTERFACE)
+        interest(2)
+        prompt("Interface")
+    }
+    field(OCTETIV, DBF_LONG) {
+        interest(2)
+        prompt("asynOctet is valid")
+    }
+    field(OPTIONIV, DBF_LONG) {
+        interest(2)
+        prompt("asynOption is valid")
+    }
+    field(GPIBIV, DBF_LONG) {
+        interest(2)
+        prompt("asynGPIB is valid")
+    }
+    field(I32IV, DBF_LONG) {
+        interest(2)
+        prompt("asynInt32 is valid")
+    }
+    field(UI32IV, DBF_LONG) {
+        interest(2)
+        prompt("asynUInt32Digital is valid")
+    }
+    field(F64IV, DBF_LONG) {
+        interest(2)
+        prompt("asynFloat64 is valid")
+    }
+    field(AOUT, DBF_STRING) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        pp(TRUE)
+        size(40)
+        prompt("Output (command) string")
+    }
+    field(OEOS, DBF_STRING) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_MOD)
+        interest(1)
+        size(40)
+        prompt("Output delimiter")
+    }
+    field(BOUT, DBF_CHAR) {
+        special(SPC_DBADDR)
+        interest(1)
+        pp(TRUE)
+        prompt("Output binary data")
+    }
+    field(OPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *optr")
+        interest(4)
+        prompt("Output buffer pointer")
+    }
+    field(OMAX, DBF_LONG) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_NOMOD)
+        initial("80")
+        interest(1)
+        prompt("Max. size of output array")
+    }
+    field(NOWT, DBF_LONG) {
+        promptgroup(GUI_OUTPUT)
+        initial("80")
+        interest(1)
+        prompt("Number of bytes to write")
+    }
+    field(NAWT, DBF_LONG) {
+        interest(1)
+        prompt("Number of bytes actually written")
+    }
+    field(OFMT, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(asynFMT)
+        interest(1)
+        prompt("Output format")
+    }
+    field(AINP, DBF_STRING) {
+        special(SPC_NOMOD)
+        interest(1)
+        size(40)
+        prompt("Input (response) string")
+    }
+    field(TINP, DBF_STRING) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("Translated input string")
+    }
+    field(IEOS, DBF_STRING) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        interest(1)
+        size(40)
+        prompt("Input Delimiter")
+    }
+    field(BINP, DBF_CHAR) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        prompt("Input binary data")
+    }
+    field(IPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *iptr")
+        interest(4)
+        size(4)
+        prompt("Input buffer pointer")
+    }
+    field(IMAX, DBF_LONG) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_NOMOD)
+        initial("80")
+        interest(1)
+        prompt("Max. size of input array")
+    }
+    field(NRRD, DBF_LONG) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Number of bytes to read")
+    }
+    field(NORD, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Number of bytes read")
+    }
+    field(IFMT, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(asynFMT)
+        interest(1)
+        prompt("Input format")
+    }
+    field(EOMR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(asynEOMREASON)
+        interest(1)
+        prompt("EOM reason")
+    }
+    field(I32INP, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("asynInt32 input")
+    }
+    field(I32OUT, DBF_LONG) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        pp(TRUE)
+        prompt("asynInt32 output")
+    }
+    field(UI32INP, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("asynUInt32Digital input")
+    }
+    field(UI32OUT, DBF_ULONG) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        pp(TRUE)
+        prompt("asynUInt32Digital output")
+    }
+    field(UI32MASK, DBF_ULONG) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_MOD)
+        interest(2)
+        initial("0xffffffff")
+        prompt("asynUInt32Digital mask")
+    }
+    field(F64INP, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("asynFloat64 input")
+    }
+    field(F64OUT, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        pp(TRUE)
+        prompt("asynFloat64 output")
+    }
+    field(BAUD, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialBAUD)
+        interest(2)
+        prompt("Baud rate")
+    }
+    field(LBAUD, DBF_LONG) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        interest(2)
+        prompt("Baud rate")
+    }
+    field(PRTY, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialPRTY)
+        interest(2)
+        prompt("Parity")
+    }
+    field(DBIT, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialDBIT)
+        interest(2)
+        prompt("Data bits")
+    }
+    field(SBIT, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialSBIT)
+        interest(2)
+        prompt("Stop bits")
+    }
+    field(MCTL, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialMCTL)
+        interest(2)
+        prompt("Modem control")
+    }
+    field(FCTL, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialFCTL)
+        interest(2)
+        prompt("Flow control")
+    }
+    field(IXON, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialIX)
+        interest(2)
+        prompt("Output XON/XOFF")
+    }
+    field(IXOFF, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialIX)
+        interest(2)
+        prompt("Input XON/XOFF")
+    }
+    field(IXANY, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(serialIX)
+        interest(2)
+        prompt("XON=any character")
+    }
+    field(UCMD, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(gpibUCMD)
+        interest(2)
+        pp(TRUE)
+        prompt("Universal command")
+    }
+    field(ACMD, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(gpibACMD)
+        interest(2)
+        pp(TRUE)
+        prompt("Addressed command")
+    }
+    field(SPR, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Serial poll response")
+    }
+    field(TMSK, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Trace mask")
+    }
+    field(TB0, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace error")
+    }
+    field(TB1, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace IO device")
+    }
+    field(TB2, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace IO filter")
+    }
+    field(TB3, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace IO driver")
+    }
+    field(TB4, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace flow")
+    }
+    field(TB5, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace warning")
+    }
+    field(TIOM, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Trace I/O mask")
+    }
+    field(TIB0, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace IO ASCII")
+    }
+    field(TIB1, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace IO escape")
+    }
+    field(TIB2, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace IO hex")
+    }
+    field(TINM, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Trace Info mask")
+    }
+    field(TINB0, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace Info Time")
+    }
+    field(TINB1, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace Info Port")
+    }
+    field(TINB2, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace Info Source")
+    }
+    field(TINB3, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        menu(asynTRACE)
+        interest(1)
+        prompt("Trace Info Thread")
+    }
+    field(TSIZ, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Trace IO truncate size")
+    }
+    field(TFIL, DBF_STRING) {
+        promptgroup(GUI_DISPLAY)
+        special(SPC_MOD)
+        interest(1)
+        size(40)
+        prompt("Trace IO file")
+    }
+    field(AUCT, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(asynAUTOCONNECT)
+        interest(1)
+        prompt("Autoconnect")
+    }
+    field(CNCT, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(asynCONNECT)
+        interest(1)
+        prompt("Connect/Disconnect")
+    }
+    field(ENBL, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        special(SPC_MOD)
+        menu(asynENABLE)
+        interest(1)
+        prompt("Enable/Disable")
+    }
+    field(ERRS, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *errs")
+        interest(4)
+        prompt("Error string")
+    }
+    field(AQR, DBF_UCHAR) {
+        special(SPC_MOD)
+        interest(4)
+        prompt("Abort queueRequest")
+    }
+}
+device(asyn, INST_IO, asynRecordDevice, "asynRecordDevice")
+recordtype(waveform) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *		val")
+        pp(TRUE)
+        prompt("Value")
+    }
+    field(RARM, DBF_SHORT) {
+        promptgroup(GUI_WAVE)
+        interest(1)
+        pp(TRUE)
+        prompt("Rearm the waveform")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Engineering Units Name")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(NELM, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Number of Elements")
+    }
+    field(FTVL, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        interest(1)
+        prompt("Field Type of Value")
+    }
+    field(BUSY, DBF_SHORT) {
+        special(SPC_NOMOD)
+        prompt("Busy Indicator")
+    }
+    field(NORD, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Number elements read")
+    }
+    field(BPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *		bptr")
+        interest(4)
+        prompt("Buffer Pointer")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(MPST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(waveformPOST)
+        interest(1)
+        prompt("Post Value Monitors")
+    }
+    field(APST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(waveformPOST)
+        interest(1)
+        prompt("Post Archive Monitors")
+    }
+    field(HASH, DBF_ULONG) {
+        interest(3)
+        prompt("Hash of OnChange data.")
+    }
+}
+device(waveform, CONSTANT, devWfSoft, "Soft Channel")
+device(waveform, INST_IO, asynWfOctetCmdResponse, "asynOctetCmdResponse")
+device(waveform, INST_IO, asynWfOctetWriteRead, "asynOctetWriteRead")
+device(waveform, INST_IO, asynWfOctetRead, "asynOctetRead")
+device(waveform, INST_IO, asynWfOctetWrite, "asynOctetWrite")
+device(waveform, INST_IO, asynInt8ArrayWfIn, "asynInt8ArrayIn")
+device(waveform, INST_IO, asynInt8ArrayWfOut, "asynInt8ArrayOut")
+device(waveform, INST_IO, asynInt16ArrayWfIn, "asynInt16ArrayIn")
+device(waveform, INST_IO, asynInt16ArrayWfOut, "asynInt16ArrayOut")
+device(waveform, INST_IO, asynInt32ArrayWfIn, "asynInt32ArrayIn")
+device(waveform, INST_IO, asynInt32ArrayWfOut, "asynInt32ArrayOut")
+device(waveform, INST_IO, asynInt32TimeSeries, "asynInt32TimeSeries")
+device(waveform, INST_IO, asynFloat32ArrayWfIn, "asynFloat32ArrayIn")
+device(waveform, INST_IO, asynFloat32ArrayWfOut, "asynFloat32ArrayOut")
+device(waveform, INST_IO, asynFloat64ArrayWfIn, "asynFloat64ArrayIn")
+device(waveform, INST_IO, asynFloat64ArrayWfOut, "asynFloat64ArrayOut")
+device(waveform, INST_IO, asynFloat64TimeSeries, "asynFloat64TimeSeries")
+device(waveform, INST_IO, devwaveformStream, "stream")
+recordtype(fanout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Used to trigger")
+    }
+    field(SELM, DBF_MENU) {
+        promptgroup(GUI_LINKS)
+        menu(fanoutSELM)
+        interest(1)
+        prompt("Select Mechanism")
+    }
+    field(SELN, DBF_USHORT) {
+        initial("1")
+        interest(1)
+        prompt("Link Selection")
+    }
+    field(SELL, DBF_INLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Link Selection Loc")
+    }
+    field(OFFS, DBF_SHORT) {
+        initial("0")
+        interest(1)
+        prompt("Offset for Specified")
+    }
+    field(SHFT, DBF_SHORT) {
+        initial("-1")
+        interest(1)
+        prompt("Shift for Mask mode")
+    }
+    field(LNK0, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 0")
+    }
+    field(LNK1, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 1")
+    }
+    field(LNK2, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 2")
+    }
+    field(LNK3, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 3")
+    }
+    field(LNK4, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 4")
+    }
+    field(LNK5, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 5")
+    }
+    field(LNK6, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 6")
+    }
+    field(LNK7, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 7")
+    }
+    field(LNK8, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 8")
+    }
+    field(LNK9, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 9")
+    }
+    field(LNKA, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 10")
+    }
+    field(LNKB, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 11")
+    }
+    field(LNKC, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 12")
+    }
+    field(LNKD, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 13")
+    }
+    field(LNKE, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 14")
+    }
+    field(LNKF, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Link 15")
+    }
+}
+recordtype(longin) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        promptgroup(GUI_INPUTS)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Current value")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units name")
+    }
+    field(HOPR, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_LONG) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(AFTC, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Filter Time Constant")
+    }
+    field(AFVL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Alarm Filter Value")
+    }
+    field(ADEL, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(LALM, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_LONG) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+}
+device(longin, CONSTANT, devLiSoft, "Soft Channel")
+device(longin, CONSTANT, devLiSoftCallback, "Async Soft Channel")
+device(longin, INST_IO, devLiGeneralTime, "General Time")
+device(longin, INST_IO, asynLiInt32, "asynInt32")
+device(longin, INST_IO, asynLiUInt32Digital, "asynUInt32Digital")
+device(longin, INST_IO, devlonginStream, "stream")
+recordtype(printf) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %#include "devSup.h"
+    %
+    %/* Declare Device Support Entry Table */
+    %typedef struct printfdset {
+    %    long number;
+    %    DEVSUPFUN report;
+    %    DEVSUPFUN init;
+    %    DEVSUPFUN init_record;
+    %    DEVSUPFUN get_ioint_info;
+    %    DEVSUPFUN write_string;
+    %} printfdset;
+    %
+    %/* Number of INPx fields defined */
+    %#define PRINTF_NLINKS 10
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("char *val")
+        pp(TRUE)
+        prompt("Result")
+    }
+    field(SIZV, DBF_USHORT) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_NOMOD)
+        initial("41")
+        interest(1)
+        prompt("Size of VAL buffer")
+    }
+    field(LEN, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Length of VAL")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(FMT, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        pp(TRUE)
+        size(81)
+        prompt("Format String")
+    }
+    field(IVLS, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        initial("LNK")
+        size(16)
+        prompt("Invalid Link String")
+    }
+    field(INP0, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 0")
+    }
+    field(INP1, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 1")
+    }
+    field(INP2, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 2")
+    }
+    field(INP3, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 3")
+    }
+    field(INP4, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 4")
+    }
+    field(INP5, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 5")
+    }
+    field(INP6, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 6")
+    }
+    field(INP7, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 7")
+    }
+    field(INP8, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 8")
+    }
+    field(INP9, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input 9")
+    }
+}
+device(printf, CONSTANT, devPrintfSoft, "Soft Channel")
+device(printf, CONSTANT, devPrintfSoftCallback, "Async Soft Channel")
+device(printf, INST_IO, devPrintfStdio, "stdio")
+recordtype(sel) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("Result")
+    }
+    field(SELM, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(selSELM)
+        prompt("Select Mechanism")
+    }
+    field(SELN, DBF_USHORT) {
+        prompt("Index value")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(NVL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Index Value Location")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_SELECT)
+        interest(1)
+        prompt("Input L")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(LA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(LB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(LC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(LD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(LE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(LF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(LG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(LH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(LI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(LK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(LL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(NLST, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Index Monitored")
+    }
+}
+recordtype(swait) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_FLOAT) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(HOPR, DBF_FLOAT) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_FLOAT) {
+        promptgroup(GUI_BITS1)
+        asl(ASL0)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(INIT, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Initialized?")
+    }
+    field(CBST, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *         cbst")
+        interest(4)
+        size(4)
+        prompt("Pointer to cbStruct")
+    }
+    field(INAN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPA PV Name")
+    }
+    field(INBN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPB PV Name")
+    }
+    field(INCN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPC PV Name")
+    }
+    field(INDN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPD PV Name")
+    }
+    field(INEN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPE PV Name")
+    }
+    field(INFN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPF PV Name")
+    }
+    field(INGN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPG PV Name")
+    }
+    field(INHN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPH PV Name")
+    }
+    field(ININ, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPI PV Name")
+    }
+    field(INJN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPJ PV Name")
+    }
+    field(INKN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPK PV Name")
+    }
+    field(INLN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPL PV Name")
+    }
+    field(DOLN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("DOL  PV Name")
+    }
+    field(OUTN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("OUT  PV Name")
+    }
+    field(INAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPA PV Status")
+    }
+    field(INBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPB PV Status")
+    }
+    field(INCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPC PV Status")
+    }
+    field(INDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPD PV Status")
+    }
+    field(INEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPE PV Status")
+    }
+    field(INFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPF PV Status")
+    }
+    field(INGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPG PV Status")
+    }
+    field(INHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPH PV Status")
+    }
+    field(INIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPI PV Status")
+    }
+    field(INJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPJ PV Status")
+    }
+    field(INKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPK PV Status")
+    }
+    field(INLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPL PV Status")
+    }
+    field(DOLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("DOL  PV Status")
+    }
+    field(OUTV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("OUT  PV Status")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(LA, DBF_DOUBLE) {
+        prompt("Last Val of Input A")
+    }
+    field(LB, DBF_DOUBLE) {
+        prompt("Last Val of Input B")
+    }
+    field(LC, DBF_DOUBLE) {
+        prompt("Last Val of Input C")
+    }
+    field(LD, DBF_DOUBLE) {
+        prompt("Last Val of Input D")
+    }
+    field(LE, DBF_DOUBLE) {
+        prompt("Last Val of Input E")
+    }
+    field(LF, DBF_DOUBLE) {
+        prompt("Last Val of Input F")
+    }
+    field(LG, DBF_DOUBLE) {
+        prompt("Last Val of Input G")
+    }
+    field(LH, DBF_DOUBLE) {
+        prompt("Last Val of Input H")
+    }
+    field(LI, DBF_DOUBLE) {
+        prompt("Last Val of Input I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        prompt("Last Val of Input J")
+    }
+    field(LK, DBF_DOUBLE) {
+        prompt("Last Val of Input K")
+    }
+    field(LL, DBF_DOUBLE) {
+        prompt("Last Val of Input L")
+    }
+    field(INAP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPA causes I/O INTR")
+    }
+    field(INBP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPB causes I/O INTR")
+    }
+    field(INCP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPC causes I/O INTR")
+    }
+    field(INDP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPD causes I/O INTR")
+    }
+    field(INEP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPE causes I/O INTR")
+    }
+    field(INFP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPF causes I/O INTR")
+    }
+    field(INGP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPG causes I/O INTR")
+    }
+    field(INHP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPH causes I/O INTR")
+    }
+    field(INIP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPI causes I/O INTR")
+    }
+    field(INJP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPJ causes I/O INTR")
+    }
+    field(INKP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPK causes I/O INTR")
+    }
+    field(INLP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPL causes I/O INTR")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CLOCK)
+        special(SPC_CALC)
+        asl(ASL0)
+        initial("0")
+        size(36)
+        prompt("Calculation")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char    rpcl[184]")
+        interest(4)
+        size(184)
+        prompt("Reverse Polish Calc")
+    }
+    field(CLCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Valid")
+    }
+    field(VAL, DBF_DOUBLE) {
+        prompt("Value Field")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        prompt("Old Value")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_COMMON)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(OOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitOOPT)
+        interest(1)
+        prompt("Output Execute Opt")
+    }
+    field(ODLY, DBF_FLOAT) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("Output Execute Delay")
+    }
+    field(DOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitDOPT)
+        interest(1)
+        prompt("Output Data Option")
+    }
+    field(DOLD, DBF_DOUBLE) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        interest(1)
+        prompt("Desired Output Data")
+    }
+    field(OEVT, DBF_USHORT) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        prompt("Event To Issue")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_PULSE)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_DOUBLE) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_PULSE)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_SELECT)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+}
+device(swait, CONSTANT, devSWaitIoEvent, "Soft Channel")
+recordtype(bi) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(VAL, DBF_ENUM) {
+        promptgroup(GUI_INPUTS)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Current Value")
+    }
+    field(ZSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Zero Error Severity")
+    }
+    field(OSV, DBF_MENU) {
+        promptgroup(GUI_BITS1)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("One Error Severity")
+    }
+    field(COSV, DBF_MENU) {
+        promptgroup(GUI_BITS2)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Change of State Svr")
+    }
+    field(ZNAM, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_CALC)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("Zero Name")
+    }
+    field(ONAM, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        pp(TRUE)
+        size(26)
+        prompt("One Name")
+    }
+    field(RVAL, DBF_ULONG) {
+        pp(TRUE)
+        prompt("Raw Value")
+    }
+    field(ORAW, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("prev Raw Value")
+    }
+    field(MASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Hardware Mask")
+    }
+    field(LALM, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(MLST, DBF_USHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Monitored")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_ULONG) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuSimm)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+}
+device(bi, CONSTANT, devBiSoft, "Soft Channel")
+device(bi, CONSTANT, devBiSoftRaw, "Raw Soft Channel")
+device(bi, CONSTANT, devBiSoftCallback, "Async Soft Channel")
+device(bi, INST_IO, devBiDbState, "Db State")
+device(bi, INST_IO, asynBiInt32, "asynInt32")
+device(bi, INST_IO, asynBiUInt32Digital, "asynUInt32Digital")
+device(bi, INST_IO, devbiStream, "stream")
+recordtype(lso) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %#include "devSup.h"
+    %
+    %/* Declare Device Support Entry Table */
+    %typedef struct lsodset {
+    %    long number;
+    %    DEVSUPFUN report;
+    %    DEVSUPFUN init;
+    %    DEVSUPFUN init_record;
+    %    DEVSUPFUN get_ioint_info;
+    %    DEVSUPFUN write_string;
+    %} lsodset;
+    %
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("char *val")
+        pp(TRUE)
+        prompt("Current Value")
+    }
+    field(OVAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *oval")
+        interest(3)
+        prompt("Previous Value")
+    }
+    field(SIZV, DBF_USHORT) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_NOMOD)
+        initial("41")
+        interest(1)
+        prompt("Size of buffers")
+    }
+    field(LEN, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Length of VAL")
+    }
+    field(OLEN, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Length of OVAL")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Desired Output Link")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID Output Action")
+    }
+    field(IVOV, DBF_STRING) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        size(40)
+        prompt("INVALID Output Value")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuOmsl)
+        interest(1)
+        prompt("Output Mode Select")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(MPST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(menuPost)
+        interest(1)
+        prompt("Post Value Monitors")
+    }
+    field(APST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(menuPost)
+        interest(1)
+        prompt("Post Archive Monitors")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode link")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+}
+device(lso, CONSTANT, devLsoSoft, "Soft Channel")
+device(lso, CONSTANT, devLsoSoftCallback, "Async Soft Channel")
+device(lso, INST_IO, devLsoStdio, "stdio")
+recordtype(subArray) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *		val")
+        pp(TRUE)
+        prompt("Value")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_COMMON)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(FTVL, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        interest(1)
+        prompt("Field Type of Value")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_BITS1)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_BITS2)
+        interest(1)
+        size(16)
+        prompt("Engineering Units Name")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(MALM, DBF_ULONG) {
+        promptgroup(GUI_CLOCK)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Maximum Elements  ")
+    }
+    field(NELM, DBF_ULONG) {
+        promptgroup(GUI_COMPRESS)
+        initial("1")
+        pp(TRUE)
+        prompt("Number of Elements")
+    }
+    field(INDX, DBF_ULONG) {
+        promptgroup(GUI_CONVERT)
+        pp(TRUE)
+        prompt("Substring Index")
+    }
+    field(BUSY, DBF_SHORT) {
+        special(SPC_NOMOD)
+        prompt("Busy Indicator")
+    }
+    field(NORD, DBF_LONG) {
+        special(SPC_NOMOD)
+        prompt("Number elements read")
+    }
+    field(BPTR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *		bptr")
+        interest(4)
+        prompt("Buffer Pointer")
+    }
+}
+device(subArray, CONSTANT, devSASoft, "Soft Channel")
+recordtype(transform) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_FLOAT) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *         rpvt")
+        interest(4)
+        size(4)
+        prompt("Record Private")
+    }
+    field(IVLA, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(transformIVLA)
+        initial("0")
+        interest(1)
+        prompt("Invalid link action")
+    }
+    field(COPT, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(transformCOPT)
+        initial("Conditional")
+        interest(1)
+        prompt("Calc option")
+    }
+    field(VAL, DBF_DOUBLE) {
+        prompt("Result")
+    }
+    field(CLCA, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation A")
+    }
+    field(CLCB, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation B")
+    }
+    field(CLCC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation C")
+    }
+    field(CLCD, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation D")
+    }
+    field(CLCE, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation E")
+    }
+    field(CLCF, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation F")
+    }
+    field(CLCG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation G")
+    }
+    field(CLCH, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation H")
+    }
+    field(CLCI, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation I")
+    }
+    field(CLCJ, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation J")
+    }
+    field(CLCK, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation K")
+    }
+    field(CLCL, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation L")
+    }
+    field(CLCM, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation M")
+    }
+    field(CLCN, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation N")
+    }
+    field(CLCO, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation O")
+    }
+    field(CLCP, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation P")
+    }
+    field(CAV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CBV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CDV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CEV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CFV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CGV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CHV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CIV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CJV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CKV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CLV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CMV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CNV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(COV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CPV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input L")
+    }
+    field(INPM, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input M")
+    }
+    field(INPN, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input N")
+    }
+    field(INPO, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input O")
+    }
+    field(INPP, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input P")
+    }
+    field(OUTA, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output A")
+    }
+    field(OUTB, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output B")
+    }
+    field(OUTC, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output C")
+    }
+    field(OUTD, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output D")
+    }
+    field(OUTE, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output E")
+    }
+    field(OUTF, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output F")
+    }
+    field(OUTG, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output G")
+    }
+    field(OUTH, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output H")
+    }
+    field(OUTI, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output I")
+    }
+    field(OUTJ, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output J")
+    }
+    field(OUTK, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output K")
+    }
+    field(OUTL, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output L")
+    }
+    field(OUTM, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output M")
+    }
+    field(OUTN, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output N")
+    }
+    field(OUTO, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output O")
+    }
+    field(OUTP, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output P")
+    }
+    field(EGU, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_COMMON)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(A, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of A")
+    }
+    field(B, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of B")
+    }
+    field(C, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of C")
+    }
+    field(D, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of D")
+    }
+    field(E, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of E")
+    }
+    field(F, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of F")
+    }
+    field(G, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of G")
+    }
+    field(H, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of H")
+    }
+    field(I, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of I")
+    }
+    field(J, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of J")
+    }
+    field(K, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of K")
+    }
+    field(L, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of L")
+    }
+    field(M, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of M")
+    }
+    field(N, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of N")
+    }
+    field(O, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of O")
+    }
+    field(P, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of P")
+    }
+    field(LA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(LB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(LC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(LD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(LE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(LF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(LG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(LH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(LI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(LK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(LL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(LM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of M")
+    }
+    field(LN, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of N")
+    }
+    field(LO, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of O")
+    }
+    field(LP, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of P")
+    }
+    field(RPCA, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpca[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc A")
+    }
+    field(RPCB, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcb[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc B")
+    }
+    field(RPCC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcc[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc C")
+    }
+    field(RPCD, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcd[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc D")
+    }
+    field(RPCE, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpce[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc E")
+    }
+    field(RPCF, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcf[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc F")
+    }
+    field(RPCG, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcg[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc G")
+    }
+    field(RPCH, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpch[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc H")
+    }
+    field(RPCI, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpci[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc I")
+    }
+    field(RPCJ, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcj[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc J")
+    }
+    field(RPCK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpck[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc K")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcl[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc L")
+    }
+    field(RPCM, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcm[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc M")
+    }
+    field(RPCN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcn[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc N")
+    }
+    field(RPCO, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpco[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc O")
+    }
+    field(RPCP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcp[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc P")
+    }
+    field(CMTA, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment A")
+    }
+    field(CMTB, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment B")
+    }
+    field(CMTC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment C")
+    }
+    field(CMTD, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment D")
+    }
+    field(CMTE, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment E")
+    }
+    field(CMTF, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment F")
+    }
+    field(CMTG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment G")
+    }
+    field(CMTH, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment H")
+    }
+    field(CMTI, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment I")
+    }
+    field(CMTJ, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment J")
+    }
+    field(CMTK, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment K")
+    }
+    field(CMTL, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment L")
+    }
+    field(CMTM, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment M")
+    }
+    field(CMTN, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment N")
+    }
+    field(CMTO, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment O")
+    }
+    field(CMTP, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment P")
+    }
+    field(MAP, DBF_SHORT) {
+        promptgroup(GUI_COMMON)
+        interest(3)
+        prompt("Input bitmap")
+    }
+    field(IAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(ICV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(ILV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IMV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(INV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IOV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IPV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(OAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(ODV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OMV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(ONV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OOV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OPV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+}
+recordtype(calc) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %#include "postfix.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Result")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_CALC)
+        initial("0")
+        pp(TRUE)
+        size(80)
+        prompt("Calculation")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        interest(1)
+        prompt("Input L")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(AFTC, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Filter Time Constant")
+    }
+    field(AFVL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Alarm Filter Value")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(LA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(LB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(LC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(LD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(LE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(LF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(LG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(LH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(LI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(LK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(LL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char	rpcl[INFIX_TO_POSTFIX_SIZE(80)]")
+        interest(4)
+        prompt("Reverse Polish Calc")
+    }
+}
+recordtype(mbboDirect) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_USHORT) {
+        promptgroup(GUI_OUTPUT)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Word")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        special(SPC_RESET)
+        menu(menuOmsl)
+        interest(1)
+        pp(TRUE)
+        prompt("Output Mode Select")
+    }
+    field(NOBT, DBF_SHORT) {
+        promptgroup(GUI_MBB)
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Number of Bits")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Desired Output Loc")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(B0, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 0")
+    }
+    field(B1, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 1")
+    }
+    field(B2, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 2")
+    }
+    field(B3, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 3")
+    }
+    field(B4, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 4")
+    }
+    field(B5, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 5")
+    }
+    field(B6, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 6")
+    }
+    field(B7, DBF_UCHAR) {
+        promptgroup(GUI_BITS1)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 7")
+    }
+    field(B8, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 8")
+    }
+    field(B9, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 9")
+    }
+    field(BA, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 10")
+    }
+    field(BB, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 11")
+    }
+    field(BC, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 12")
+    }
+    field(BD, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 13")
+    }
+    field(BE, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 14")
+    }
+    field(BF, DBF_UCHAR) {
+        promptgroup(GUI_BITS2)
+        special(SPC_MOD)
+        interest(1)
+        pp(TRUE)
+        prompt("Bit 15")
+    }
+    field(RVAL, DBF_ULONG) {
+        special(SPC_NOMOD)
+        pp(TRUE)
+        prompt("Raw Value")
+    }
+    field(ORAW, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Raw Value")
+    }
+    field(RBV, DBF_ULONG) {
+        special(SPC_NOMOD)
+        prompt("Readback Value")
+    }
+    field(ORBV, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Readback Value")
+    }
+    field(MASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Hardware Mask")
+    }
+    field(MLST, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Monitored")
+    }
+    field(SHFT, DBF_ULONG) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Shift")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_MBB)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_MBB)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID outpt action")
+    }
+    field(IVOV, DBF_USHORT) {
+        promptgroup(GUI_MBB)
+        interest(2)
+        prompt("INVALID output value")
+    }
+}
+device(mbboDirect, CONSTANT, devMbboDirectSoft, "Soft Channel")
+device(mbboDirect, CONSTANT, devMbboDirectSoftRaw, "Raw Soft Channel")
+device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel")
+device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital")
+device(mbboDirect, INST_IO, devmbboDirectStream, "stream")
+recordtype(acalcout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *rpvt")
+        interest(4)
+        size(4)
+        prompt("Record Private")
+    }
+    field(VAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Result")
+    }
+    field(AVAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *aval")
+        pp(TRUE)
+        prompt("Array Value")
+    }
+    field(NELM, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Number of Elements")
+    }
+    field(NUSE, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_MOD)
+        initial("0")
+        interest(1)
+        pp(TRUE)
+        prompt("# elem's in use")
+    }
+    field(PVAL, DBF_DOUBLE) {
+        prompt("Previous Value")
+    }
+    field(PAVL, DBF_NOACCESS) {
+        asl(ASL0)
+        extra("double *pavl")
+        pp(TRUE)
+        prompt("Prev. Array Value")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Calculation")
+    }
+    field(CLCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Valid")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input L")
+    }
+    field(INAA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input AA")
+    }
+    field(INBB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input BB")
+    }
+    field(INCC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input CC")
+    }
+    field(INDD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input DD")
+    }
+    field(INEE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input EE")
+    }
+    field(INFF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input FF")
+    }
+    field(INGG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input GG")
+    }
+    field(INHH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input HH")
+    }
+    field(INII, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input II")
+    }
+    field(INJJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input JJ")
+    }
+    field(INKK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input KK")
+    }
+    field(INLL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input LL")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link")
+    }
+    field(INAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPA PV Status")
+    }
+    field(INBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPB PV Status")
+    }
+    field(INCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPC PV Status")
+    }
+    field(INDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPD PV Status")
+    }
+    field(INEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPE PV Status")
+    }
+    field(INFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPF PV Status")
+    }
+    field(INGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPG PV Status")
+    }
+    field(INHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPH PV Status")
+    }
+    field(INIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPI PV Status")
+    }
+    field(INJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPJ PV Status")
+    }
+    field(INKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPK PV Status")
+    }
+    field(INLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPL PV Status")
+    }
+    field(IAAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INAA PV Status")
+    }
+    field(IBBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INBB PV Status")
+    }
+    field(ICCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INCC PV Status")
+    }
+    field(IDDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INDD PV Status")
+    }
+    field(IEEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INEE PV Status")
+    }
+    field(IFFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INFF PV Status")
+    }
+    field(IGGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INGG PV Status")
+    }
+    field(IHHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INHH PV Status")
+    }
+    field(IIIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INII PV Status")
+    }
+    field(IJJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INJJ PV Status")
+    }
+    field(IKKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INKK PV Status")
+    }
+    field(ILLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INLL PV Status")
+    }
+    field(OUTV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        interest(1)
+        prompt("OUT PV Status")
+    }
+    field(OOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(acalcoutOOPT)
+        interest(1)
+        prompt("Output Execute Opt")
+    }
+    field(ODLY, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("Output Execute Delay")
+    }
+    field(WAIT, DBF_MENU) {
+        menu(acalcoutWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(DLYA, DBF_USHORT) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("Output Delay Active")
+    }
+    field(DOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(acalcoutDOPT)
+        interest(1)
+        prompt("Output Data Opt")
+    }
+    field(OCAL, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Output Calculation")
+    }
+    field(OCLV, DBF_LONG) {
+        interest(1)
+        prompt("OCAL Valid")
+    }
+    field(OEVT, DBF_USHORT) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        prompt("Event To Issue")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+    field(EGU, DBF_STRING) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(AA, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *aa")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(BB, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *bb")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(CC, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *cc")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(DD, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *dd")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(EE, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ee")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(FF, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ff")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(GG, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *gg")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(HH, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *hh")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(II, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ii")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(JJ, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *jj")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(KK, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *kk")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(LL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ll")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(PAA, DBF_NOACCESS) {
+        asl(ASL0)
+        extra("double *paa")
+        prompt("Prev Val of array input")
+    }
+    field(NEWM, DBF_ULONG) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("new array value mask")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Output Value")
+    }
+    field(OAV, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *oav")
+        pp(TRUE)
+        prompt("Output array value")
+    }
+    field(POAV, DBF_NOACCESS) {
+        asl(ASL0)
+        extra("double *poav")
+        pp(TRUE)
+        prompt("Output array value")
+    }
+    field(PA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(PB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(PC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(PD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(PE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(PF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(PG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(PH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(PI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(PJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(PK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(PL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(POVL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Prev Value of OVAL")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcl[282]")
+        interest(4)
+        prompt("Reverse Polish Calc")
+    }
+    field(ORPC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char orpc[282]")
+        interest(4)
+        prompt("Reverse Polish OCalc")
+    }
+    field(CACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Calc active")
+    }
+    field(CSTAT, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Calc status")
+    }
+    field(AMASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Array mod")
+    }
+    field(SIZE, DBF_MENU) {
+        menu(acalcoutSIZE)
+        interest(1)
+        prompt("Array size reported to clients")
+    }
+}
+device(acalcout, CONSTANT, devaCalcoutSoft, "Soft Channel")
+recordtype(longout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        promptgroup(GUI_OUTPUT)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Desired Output")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Specification")
+    }
+    field(DOL, DBF_INLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Desired Output Loc")
+    }
+    field(OMSL, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuOmsl)
+        interest(1)
+        prompt("Output Mode Select")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units name")
+    }
+    field(DRVH, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        pp(TRUE)
+        prompt("Drive High Limit")
+    }
+    field(DRVL, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        pp(TRUE)
+        prompt("Drive Low Limit")
+    }
+    field(HOPR, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_LONG) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_LONG) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_LONG) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(LALM, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(SIOL, DBF_OUTLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Output Specifctn")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_LONG) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+}
+device(longout, CONSTANT, devLoSoft, "Soft Channel")
+device(longout, CONSTANT, devLoSoftCallback, "Async Soft Channel")
+device(longout, INST_IO, asynLoInt32, "asynInt32")
+device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital")
+device(longout, INST_IO, devlongoutStream, "stream")
+recordtype(scalcout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *rpvt")
+        interest(4)
+        size(4)
+        prompt("Record Private")
+    }
+    field(VAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Result")
+    }
+    field(SVAL, DBF_STRING) {
+        asl(ASL0)
+        size(40)
+        prompt("String result")
+    }
+    field(PVAL, DBF_DOUBLE) {
+        prompt("Previous Value")
+    }
+    field(PSVL, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(40)
+        prompt("Previous string result")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Calculation")
+    }
+    field(CLCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Valid")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input L")
+    }
+    field(INAA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input AA")
+    }
+    field(INBB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input BB")
+    }
+    field(INCC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input CC")
+    }
+    field(INDD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input DD")
+    }
+    field(INEE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input EE")
+    }
+    field(INFF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input FF")
+    }
+    field(INGG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input GG")
+    }
+    field(INHH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input HH")
+    }
+    field(INII, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input II")
+    }
+    field(INJJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input JJ")
+    }
+    field(INKK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input KK")
+    }
+    field(INLL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input LL")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link")
+    }
+    field(INAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPA PV Status")
+    }
+    field(INBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPB PV Status")
+    }
+    field(INCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPC PV Status")
+    }
+    field(INDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPD PV Status")
+    }
+    field(INEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPE PV Status")
+    }
+    field(INFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPF PV Status")
+    }
+    field(INGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPG PV Status")
+    }
+    field(INHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPH PV Status")
+    }
+    field(INIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPI PV Status")
+    }
+    field(INJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPJ PV Status")
+    }
+    field(INKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPK PV Status")
+    }
+    field(INLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPL PV Status")
+    }
+    field(IAAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INAA PV Status")
+    }
+    field(IBBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INBB PV Status")
+    }
+    field(ICCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INCC PV Status")
+    }
+    field(IDDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INDD PV Status")
+    }
+    field(IEEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INEE PV Status")
+    }
+    field(IFFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INFF PV Status")
+    }
+    field(IGGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INGG PV Status")
+    }
+    field(IHHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INHH PV Status")
+    }
+    field(IIIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INII PV Status")
+    }
+    field(IJJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INJJ PV Status")
+    }
+    field(IKKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INKK PV Status")
+    }
+    field(ILLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INLL PV Status")
+    }
+    field(OUTV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        interest(1)
+        prompt("OUT PV Status")
+    }
+    field(OOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(scalcoutOOPT)
+        interest(1)
+        prompt("Output Execute Opt")
+    }
+    field(ODLY, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("Output Execute Delay")
+    }
+    field(WAIT, DBF_MENU) {
+        menu(scalcoutWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(DLYA, DBF_USHORT) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("Output Delay Active")
+    }
+    field(DOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(scalcoutDOPT)
+        interest(1)
+        prompt("Output Data Opt")
+    }
+    field(OCAL, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Output Calculation")
+    }
+    field(OCLV, DBF_LONG) {
+        interest(1)
+        prompt("OCAL Valid")
+    }
+    field(OEVT, DBF_USHORT) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        prompt("Event To Issue")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+    field(EGU, DBF_STRING) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(STRS, DBF_NOACCESS) {
+        extra("char **strs")
+        interest(4)
+        size(4)
+        prompt("Array of string pointers")
+    }
+    field(AA, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input AA")
+    }
+    field(BB, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input BB")
+    }
+    field(CC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input CC")
+    }
+    field(DD, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input DD")
+    }
+    field(EE, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input EE")
+    }
+    field(FF, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input FF")
+    }
+    field(GG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input GG")
+    }
+    field(HH, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input HH")
+    }
+    field(II, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input II")
+    }
+    field(JJ, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input JJ")
+    }
+    field(KK, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input KK")
+    }
+    field(LL, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input LL")
+    }
+    field(PAA, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *paa")
+        interest(4)
+        size(4)
+        prompt("Prev Value of AA")
+    }
+    field(PBB, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pbb")
+        interest(4)
+        size(4)
+        prompt("Prev Value of BB")
+    }
+    field(PCC, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pcc")
+        interest(4)
+        size(4)
+        prompt("Prev Value of CC")
+    }
+    field(PDD, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pdd")
+        interest(4)
+        size(4)
+        prompt("Prev Value of DD")
+    }
+    field(PEE, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pee")
+        interest(4)
+        size(4)
+        prompt("Prev Value of EE")
+    }
+    field(PFF, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pff")
+        interest(4)
+        size(4)
+        prompt("Prev Value of FF")
+    }
+    field(PGG, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pgg")
+        interest(4)
+        size(4)
+        prompt("Prev Value of GG")
+    }
+    field(PHH, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *phh")
+        interest(4)
+        size(4)
+        prompt("Prev Value of HH")
+    }
+    field(PII, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pii")
+        interest(4)
+        size(4)
+        prompt("Prev Value of II")
+    }
+    field(PJJ, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pjj")
+        interest(4)
+        size(4)
+        prompt("Prev Value of JJ")
+    }
+    field(PKK, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pkk")
+        interest(4)
+        size(4)
+        prompt("Prev Value of KK")
+    }
+    field(PLL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pll")
+        interest(4)
+        size(4)
+        prompt("Prev Value of LL")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Output Value")
+    }
+    field(OSV, DBF_STRING) {
+        asl(ASL0)
+        size(40)
+        prompt("Output string value")
+    }
+    field(POSV, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(40)
+        prompt("Previous output string value")
+    }
+    field(PA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(PB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(PC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(PD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(PE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(PF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(PG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(PH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(PI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(PJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(PK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(PL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(POVL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Prev Value of OVAL")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcl[282]")
+        interest(4)
+        prompt("Postfix Calc")
+    }
+    field(ORPC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char orpc[282]")
+        interest(4)
+        prompt("Postfix OCalc")
+    }
+}
+device(scalcout, CONSTANT, devsCalcoutSoft, "Soft Channel")
+recordtype(aSub) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %struct aSubRecord;
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        asl(ASL0)
+        prompt("Subr. return value")
+    }
+    field(OVAL, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Old return value")
+    }
+    field(INAM, DBF_STRING) {
+        promptgroup(GUI_SUB)
+        special(SPC_NOMOD)
+        interest(1)
+        size(41)
+        prompt("Initialize Subr. Name")
+    }
+    field(LFLG, DBF_MENU) {
+        promptgroup(GUI_SUB)
+        menu(aSubLFLG)
+        interest(1)
+        prompt("Subr. Input Enable")
+    }
+    field(SUBL, DBF_INLINK) {
+        promptgroup(GUI_SUB)
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Subroutine Name Link")
+    }
+    field(SNAM, DBF_STRING) {
+        promptgroup(GUI_SUB)
+        special(SPC_MOD)
+        interest(1)
+        size(41)
+        prompt("Process Subr. Name")
+    }
+    field(ONAM, DBF_STRING) {
+        promptgroup(GUI_SUB)
+        special(SPC_NOMOD)
+        interest(3)
+        size(41)
+        prompt("Old Subr. Name")
+    }
+    field(SADR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("long (*sadr)(struct aSubRecord *)")
+        interest(2)
+        prompt("Subroutine Address")
+    }
+    field(CADR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void (*cadr)(struct aSubRecord *)")
+        interest(2)
+        prompt("Subroutine Cleanup Address")
+    }
+    field(BRSV, DBF_MENU) {
+        promptgroup(GUI_SUB)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Bad Return Severity")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(EFLG, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(aSubEFLG)
+        initial("1")
+        interest(1)
+        prompt("Output Event Flag")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link L")
+    }
+    field(INPM, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link M")
+    }
+    field(INPN, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link N")
+    }
+    field(INPO, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link O")
+    }
+    field(INPP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link P")
+    }
+    field(INPQ, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link Q")
+    }
+    field(INPR, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link R")
+    }
+    field(INPS, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link S")
+    }
+    field(INPT, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link T")
+    }
+    field(INPU, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Link U")
+    }
+    field(A, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *a")
+        interest(2)
+        prompt("Input value A")
+    }
+    field(B, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *b")
+        interest(2)
+        prompt("Input value B")
+    }
+    field(C, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *c")
+        interest(2)
+        prompt("Input value C")
+    }
+    field(D, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *d")
+        interest(2)
+        prompt("Input value D")
+    }
+    field(E, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *e")
+        interest(2)
+        prompt("Input value E")
+    }
+    field(F, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *f")
+        interest(2)
+        prompt("Input value F")
+    }
+    field(G, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *g")
+        interest(2)
+        prompt("Input value G")
+    }
+    field(H, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *h")
+        interest(2)
+        prompt("Input value H")
+    }
+    field(I, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *i")
+        interest(2)
+        prompt("Input value I")
+    }
+    field(J, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *j")
+        interest(2)
+        prompt("Input value J")
+    }
+    field(K, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *k")
+        interest(2)
+        prompt("Input value K")
+    }
+    field(L, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *l")
+        interest(2)
+        prompt("Input value L")
+    }
+    field(M, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *m")
+        interest(2)
+        prompt("Input value M")
+    }
+    field(N, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *n")
+        interest(2)
+        prompt("Input value N")
+    }
+    field(O, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *o")
+        interest(2)
+        prompt("Input value O")
+    }
+    field(P, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *p")
+        interest(2)
+        prompt("Input value P")
+    }
+    field(Q, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *q")
+        interest(2)
+        prompt("Input value Q")
+    }
+    field(R, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *r")
+        interest(2)
+        prompt("Input value R")
+    }
+    field(S, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *s")
+        interest(2)
+        prompt("Input value S")
+    }
+    field(T, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *t")
+        interest(2)
+        prompt("Input value T")
+    }
+    field(U, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *u")
+        interest(2)
+        prompt("Input value U")
+    }
+    field(FTA, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of A")
+    }
+    field(FTB, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of B")
+    }
+    field(FTC, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of C")
+    }
+    field(FTD, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of D")
+    }
+    field(FTE, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of E")
+    }
+    field(FTF, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of F")
+    }
+    field(FTG, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of G")
+    }
+    field(FTH, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of H")
+    }
+    field(FTI, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of I")
+    }
+    field(FTJ, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of J")
+    }
+    field(FTK, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of K")
+    }
+    field(FTL, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of L")
+    }
+    field(FTM, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of M")
+    }
+    field(FTN, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of N")
+    }
+    field(FTO, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of O")
+    }
+    field(FTP, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of P")
+    }
+    field(FTQ, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of Q")
+    }
+    field(FTR, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of R")
+    }
+    field(FTS, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of S")
+    }
+    field(FTT, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of T")
+    }
+    field(FTU, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of U")
+    }
+    field(NOA, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in A")
+    }
+    field(NOB, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in B")
+    }
+    field(NOC, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in C")
+    }
+    field(NOD, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in D")
+    }
+    field(NOE, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in E")
+    }
+    field(NOF, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in F")
+    }
+    field(NOG, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in G")
+    }
+    field(NOH, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in H")
+    }
+    field(NOI, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in I")
+    }
+    field(NOJ, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in J")
+    }
+    field(NOK, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in K")
+    }
+    field(NOL, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in L")
+    }
+    field(NOM, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in M")
+    }
+    field(NON, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in N")
+    }
+    field(NOO, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in O")
+    }
+    field(NOP, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in P")
+    }
+    field(NOQ, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in Q")
+    }
+    field(NOR, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in R")
+    }
+    field(NOS, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in S")
+    }
+    field(NOT, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in T")
+    }
+    field(NOU, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in U")
+    }
+    field(NEA, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in A")
+    }
+    field(NEB, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in B")
+    }
+    field(NEC, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in C")
+    }
+    field(NED, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in D")
+    }
+    field(NEE, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in E")
+    }
+    field(NEF, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in F")
+    }
+    field(NEG, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in G")
+    }
+    field(NEH, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in H")
+    }
+    field(NEI, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in I")
+    }
+    field(NEJ, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in J")
+    }
+    field(NEK, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in K")
+    }
+    field(NEL, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in L")
+    }
+    field(NEM, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in M")
+    }
+    field(NEN, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in N")
+    }
+    field(NEO, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in O")
+    }
+    field(NEP, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in P")
+    }
+    field(NEQ, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in Q")
+    }
+    field(NER, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in R")
+    }
+    field(NES, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in S")
+    }
+    field(NET, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in T")
+    }
+    field(NEU, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in U")
+    }
+    field(OUTA, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link A")
+    }
+    field(OUTB, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link B")
+    }
+    field(OUTC, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link C")
+    }
+    field(OUTD, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link D")
+    }
+    field(OUTE, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link E")
+    }
+    field(OUTF, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link F")
+    }
+    field(OUTG, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link G")
+    }
+    field(OUTH, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link H")
+    }
+    field(OUTI, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link I")
+    }
+    field(OUTJ, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link J")
+    }
+    field(OUTK, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link K")
+    }
+    field(OUTL, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link L")
+    }
+    field(OUTM, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link M")
+    }
+    field(OUTN, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link N")
+    }
+    field(OUTO, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link O")
+    }
+    field(OUTP, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link P")
+    }
+    field(OUTQ, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link Q")
+    }
+    field(OUTR, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link R")
+    }
+    field(OUTS, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link S")
+    }
+    field(OUTT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link T")
+    }
+    field(OUTU, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        interest(1)
+        prompt("Output Link U")
+    }
+    field(VALA, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *vala")
+        interest(2)
+        prompt("Output value A")
+    }
+    field(VALB, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valb")
+        interest(2)
+        prompt("Output value B")
+    }
+    field(VALC, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valc")
+        interest(2)
+        prompt("Output value C")
+    }
+    field(VALD, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *vald")
+        interest(2)
+        prompt("Output value D")
+    }
+    field(VALE, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *vale")
+        interest(2)
+        prompt("Output value E")
+    }
+    field(VALF, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valf")
+        interest(2)
+        prompt("Output value F")
+    }
+    field(VALG, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valg")
+        interest(2)
+        prompt("Output value G")
+    }
+    field(VALH, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valh")
+        interest(2)
+        prompt("Output value H")
+    }
+    field(VALI, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *vali")
+        interest(2)
+        prompt("Output value I")
+    }
+    field(VALJ, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valj")
+        interest(2)
+        prompt("Output value J")
+    }
+    field(VALK, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valk")
+        interest(2)
+        prompt("Output value K")
+    }
+    field(VALL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *vall")
+        interest(2)
+        prompt("Output value L")
+    }
+    field(VALM, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valm")
+        interest(2)
+        prompt("Output value M")
+    }
+    field(VALN, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valn")
+        interest(2)
+        prompt("Output value N")
+    }
+    field(VALO, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valo")
+        interest(2)
+        prompt("Output value O")
+    }
+    field(VALP, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valp")
+        interest(2)
+        prompt("Output value P")
+    }
+    field(VALQ, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valq")
+        interest(2)
+        prompt("Output value Q")
+    }
+    field(VALR, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valr")
+        interest(2)
+        prompt("Output value R")
+    }
+    field(VALS, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *vals")
+        interest(2)
+        prompt("Output value S")
+    }
+    field(VALT, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valt")
+        interest(2)
+        prompt("Output value T")
+    }
+    field(VALU, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("void *valu")
+        interest(2)
+        prompt("Output value U")
+    }
+    field(OVLA, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovla")
+        interest(4)
+        prompt("Old Output A")
+    }
+    field(OVLB, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlb")
+        interest(4)
+        prompt("Old Output B")
+    }
+    field(OVLC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlc")
+        interest(4)
+        prompt("Old Output C")
+    }
+    field(OVLD, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovld")
+        interest(4)
+        prompt("Old Output D")
+    }
+    field(OVLE, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovle")
+        interest(4)
+        prompt("Old Output E")
+    }
+    field(OVLF, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlf")
+        interest(4)
+        prompt("Old Output F")
+    }
+    field(OVLG, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlg")
+        interest(4)
+        prompt("Old Output G")
+    }
+    field(OVLH, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlh")
+        interest(4)
+        prompt("Old Output H")
+    }
+    field(OVLI, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovli")
+        interest(4)
+        prompt("Old Output I")
+    }
+    field(OVLJ, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlj")
+        interest(4)
+        prompt("Old Output J")
+    }
+    field(OVLK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlk")
+        interest(4)
+        prompt("Old Output K")
+    }
+    field(OVLL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovll")
+        interest(4)
+        prompt("Old Output L")
+    }
+    field(OVLM, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlm")
+        interest(4)
+        prompt("Old Output M")
+    }
+    field(OVLN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovln")
+        interest(4)
+        prompt("Old Output N")
+    }
+    field(OVLO, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlo")
+        interest(4)
+        prompt("Old Output O")
+    }
+    field(OVLP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlp")
+        interest(4)
+        prompt("Old Output P")
+    }
+    field(OVLQ, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlq")
+        interest(4)
+        prompt("Old Output Q")
+    }
+    field(OVLR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlr")
+        interest(4)
+        prompt("Old Output R")
+    }
+    field(OVLS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovls")
+        interest(4)
+        prompt("Old Output S")
+    }
+    field(OVLT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlt")
+        interest(4)
+        prompt("Old Output T")
+    }
+    field(OVLU, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        extra("void *ovlu")
+        interest(4)
+        prompt("Old Output U")
+    }
+    field(FTVA, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALA")
+    }
+    field(FTVB, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALB")
+    }
+    field(FTVC, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALC")
+    }
+    field(FTVD, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALD")
+    }
+    field(FTVE, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALE")
+    }
+    field(FTVF, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALF")
+    }
+    field(FTVG, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALG")
+    }
+    field(FTVH, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALH")
+    }
+    field(FTVI, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALI")
+    }
+    field(FTVJ, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALJ")
+    }
+    field(FTVK, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALK")
+    }
+    field(FTVL, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALL")
+    }
+    field(FTVM, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALM")
+    }
+    field(FTVN, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALN")
+    }
+    field(FTVO, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALO")
+    }
+    field(FTVP, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALP")
+    }
+    field(FTVQ, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALQ")
+    }
+    field(FTVR, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALR")
+    }
+    field(FTVS, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALS")
+    }
+    field(FTVT, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALT")
+    }
+    field(FTVU, DBF_MENU) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        menu(menuFtype)
+        initial("DOUBLE")
+        interest(1)
+        prompt("Type of VALU")
+    }
+    field(NOVA, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALA")
+    }
+    field(NOVB, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALB")
+    }
+    field(NOVC, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALC")
+    }
+    field(NOVD, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALD")
+    }
+    field(NOVE, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALE")
+    }
+    field(NOVF, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALF")
+    }
+    field(NOVG, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALG")
+    }
+    field(NOVH, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VAlH")
+    }
+    field(NOVI, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALI")
+    }
+    field(NOVJ, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALJ")
+    }
+    field(NOVK, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALK")
+    }
+    field(NOVL, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALL")
+    }
+    field(NOVM, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALM")
+    }
+    field(NOVN, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALN")
+    }
+    field(NOVO, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALO")
+    }
+    field(NOVP, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALP")
+    }
+    field(NOVQ, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALQ")
+    }
+    field(NOVR, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALR")
+    }
+    field(NOVS, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALS")
+    }
+    field(NOVT, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALT")
+    }
+    field(NOVU, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Max. elements in VALU")
+    }
+    field(NEVA, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALA")
+    }
+    field(NEVB, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALB")
+    }
+    field(NEVC, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALC")
+    }
+    field(NEVD, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALD")
+    }
+    field(NEVE, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALE")
+    }
+    field(NEVF, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALF")
+    }
+    field(NEVG, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALG")
+    }
+    field(NEVH, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VAlH")
+    }
+    field(NEVI, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALI")
+    }
+    field(NEVJ, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALJ")
+    }
+    field(NEVK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALK")
+    }
+    field(NEVL, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALL")
+    }
+    field(NEVM, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALM")
+    }
+    field(NEVN, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALN")
+    }
+    field(NEVO, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALO")
+    }
+    field(NEVP, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALP")
+    }
+    field(NEVQ, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALQ")
+    }
+    field(NEVR, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALR")
+    }
+    field(NEVS, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALS")
+    }
+    field(NEVT, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALT")
+    }
+    field(NEVU, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(3)
+        prompt("Num. elements in VALU")
+    }
+    field(ONVA, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLA")
+    }
+    field(ONVB, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLB")
+    }
+    field(ONVC, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLC")
+    }
+    field(ONVD, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLD")
+    }
+    field(ONVE, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLE")
+    }
+    field(ONVF, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLF")
+    }
+    field(ONVG, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLG")
+    }
+    field(ONVH, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in VAlH")
+    }
+    field(ONVI, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLI")
+    }
+    field(ONVJ, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLJ")
+    }
+    field(ONVK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLK")
+    }
+    field(ONVL, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLL")
+    }
+    field(ONVM, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLM")
+    }
+    field(ONVN, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLN")
+    }
+    field(ONVO, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLO")
+    }
+    field(ONVP, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLP")
+    }
+    field(ONVQ, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLQ")
+    }
+    field(ONVR, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLR")
+    }
+    field(ONVS, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLS")
+    }
+    field(ONVT, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLT")
+    }
+    field(ONVU, DBF_ULONG) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(4)
+        prompt("Num. elements in OVLU")
+    }
+}
+recordtype(sub) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    %struct subRecord;
+    %typedef long (*SUBFUNCPTR)(struct subRecord *);
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_DOUBLE) {
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Result")
+    }
+    field(INAM, DBF_STRING) {
+        promptgroup(GUI_SUB)
+        special(SPC_NOMOD)
+        interest(1)
+        size(40)
+        prompt("Init Routine Name")
+    }
+    field(SNAM, DBF_STRING) {
+        promptgroup(GUI_SUB)
+        special(SPC_MOD)
+        interest(1)
+        size(40)
+        prompt("Subroutine Name")
+    }
+    field(SADR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("SUBFUNCPTR sadr")
+        interest(4)
+        prompt("Subroutine Address")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input L")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(BRSV, DBF_MENU) {
+        promptgroup(GUI_SUB)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Bad Return Severity")
+    }
+    field(HHSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(LA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(LB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(LC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(LD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(LE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(LF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(LG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(LH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(LI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(LK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(LL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Monitored")
+    }
+}
+recordtype(ai) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_DOUBLE) {
+        promptgroup(GUI_INPUTS)
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Current EGU Value")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(PREC, DBF_SHORT) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(LINR, DBF_MENU) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_LINCONV)
+        menu(menuConvert)
+        interest(1)
+        pp(TRUE)
+        prompt("Linearization")
+    }
+    field(EGUF, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_LINCONV)
+        interest(1)
+        pp(TRUE)
+        prompt("Engineer Units Full")
+    }
+    field(EGUL, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        special(SPC_LINCONV)
+        interest(1)
+        pp(TRUE)
+        prompt("Engineer Units Low")
+    }
+    field(EGU, DBF_STRING) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Engineering Units")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(AOFF, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        interest(1)
+        pp(TRUE)
+        prompt("Adjustment Offset")
+    }
+    field(ASLO, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Adjustment Slope")
+    }
+    field(SMOO, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        interest(1)
+        prompt("Smoothing")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        prop(YES)
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(AFTC, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Filter Time Constant")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(AFVL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Alarm Filter Value")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(ESLO, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        initial("1")
+        interest(2)
+        pp(TRUE)
+        prompt("Raw to EGU Slope")
+    }
+    field(EOFF, DBF_DOUBLE) {
+        promptgroup(GUI_CONVERT)
+        interest(2)
+        pp(TRUE)
+        prompt("Raw to EGU Offset")
+    }
+    field(ROFF, DBF_ULONG) {
+        interest(2)
+        pp(TRUE)
+        prompt("Raw Offset")
+    }
+    field(PBRK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *   pbrk")
+        interest(4)
+        prompt("Ptrto brkTable")
+    }
+    field(INIT, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Initialized?")
+    }
+    field(LBRK, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("LastBreak Point")
+    }
+    field(RVAL, DBF_LONG) {
+        pp(TRUE)
+        prompt("Current Raw Value")
+    }
+    field(ORAW, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Previous Raw Value")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim. Input Specification")
+    }
+    field(SVAL, DBF_DOUBLE) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim. Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuSimm)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Simulation Mode Severity")
+    }
+}
+device(ai, CONSTANT, devAiSoft, "Soft Channel")
+device(ai, CONSTANT, devAiSoftRaw, "Raw Soft Channel")
+device(ai, CONSTANT, devAiSoftCallback, "Async Soft Channel")
+device(ai, INST_IO, devTimestampAI, "Soft Timestamp")
+device(ai, INST_IO, devAiGeneralTime, "General Time")
+device(ai, INST_IO, asynAiInt32, "asynInt32")
+device(ai, INST_IO, asynAiInt32Average, "asynInt32Average")
+device(ai, INST_IO, asynAiFloat64, "asynFloat64")
+device(ai, INST_IO, asynAiFloat64Average, "asynFloat64Average")
+device(ai, INST_IO, devaiStream, "stream")
+device(ai, VME_IO, adcPiAi, "adcPi")
+recordtype(stringin) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_STRING) {
+        promptgroup(GUI_INPUTS)
+        asl(ASL0)
+        pp(TRUE)
+        size(40)
+        prompt("Current Value")
+    }
+    field(OVAL, DBF_STRING) {
+        special(SPC_NOMOD)
+        interest(3)
+        size(40)
+        prompt("Previous Value")
+    }
+    field(INP, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Input Specification")
+    }
+    field(MPST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(stringinPOST)
+        interest(1)
+        prompt("Post Value Monitors")
+    }
+    field(APST, DBF_MENU) {
+        promptgroup(GUI_DISPLAY)
+        menu(stringinPOST)
+        interest(1)
+        prompt("Post Archive Monitors")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_STRING) {
+        pp(TRUE)
+        size(40)
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+}
+device(stringin, CONSTANT, devSiSoft, "Soft Channel")
+device(stringin, CONSTANT, devSiSoftCallback, "Async Soft Channel")
+device(stringin, INST_IO, devTimestampSI, "Soft Timestamp")
+device(stringin, INST_IO, devSiGeneralTime, "General Time")
+device(stringin, INST_IO, asynSiOctetCmdResponse, "asynOctetCmdResponse")
+device(stringin, INST_IO, asynSiOctetWriteRead, "asynOctetWriteRead")
+device(stringin, INST_IO, asynSiOctetRead, "asynOctetRead")
+device(stringin, INST_IO, devstringinStream, "stream")
+driver(adcPi)
+driver(stream)
+driver(drvAsyn)
+registrar(tsInitialize)
+registrar(subAveRegister)
+registrar(syncInitialize)
+registrar(asynRegister)
+registrar(interpRegister)
+registrar(asynInterposeFlushRegister)
+registrar(drvAsynIPPortRegisterCommands)
+registrar(adcPiRegister)
+registrar(arrInitialize)
+registrar(streamRegistrar)
+registrar(dbndInitialize)
+registrar(drvAsynIPServerPortRegisterCommands)
+registrar(arrayTestRegister)
+registrar(asSub)
+registrar(asynInterposeEosRegister)
+registrar(editSseqRegistrar)
+function(aSubReadDHTInit)
+function(aSubReadDHTProcess)
+variable(callbackParallelThreadsDefault, int)
+variable(aCalcAsyncThreshold, int)
+variable(devsCalcoutSoftDebug, int)
+variable(dbBptNotMonotonic, int)
+variable(boHIGHlimit, double)
+variable(atExitDebug, int)
+variable(devaCalcoutSoftDebug, int)
+variable(sCalcStackHW, int)
+variable(sCalcoutRecordDebug, int)
+variable(sCalcPerformDebug, int)
+variable(seqDLYlimit, double)
+variable(aSubReadDHTDebug, int)
+variable(swaitRecordDebug, int)
+variable(sCalcStackLW, int)
+variable(sCalcPostfixDebug, int)
+variable(histogramSDELprecision, int)
+variable(sseqRecDebug, int)
+variable(aCalcLoopMax, int)
+variable(dbTemplateMaxVars, int)
+variable(asCaDebug, int)
+variable(sCalcLoopMax, int)
+variable(dbRecordsOnceOnly, int)
+variable(transformRecordDebug, int)
+variable(aCalcPostfixDebug, int)
+variable(calcoutODLYlimit, double)
+variable(streamDebug, int)
+variable(arrayTestDebug, int)
+variable(adcPiDebug, int)
+variable(interpDebug, int)
+variable(debugSubAve, int)
+variable(seqDLYprecision, int)
+variable(boHIGHprecision, int)
+variable(calcoutODLYprecision, int)
+variable(aCalcPerformDebug, int)
+variable(aCalcoutRecordDebug, int)
--- a/iocBoot/iockstm/st.cmd	Mon Jun 27 18:08:05 2016 +0200
+++ b/iocBoot/iockstm/st.cmd	Mon Jul 09 13:36:24 2018 +0200
@@ -5,6 +5,8 @@
 
 < envPaths
 
+epicsEnvSet TOP /home/epics/FHI/vierkstm
+
 epicsEnvSet EUROTH01_INET 141.14.128.45:4001 
 epicsEnvSet EUROTH01_LINK EUROTH_01 
 
@@ -23,6 +25,9 @@
 epicsEnvSet PGC2_PC_INET 141.14.128.45:4006 
 epicsEnvSet PGC2_PC_LINK PGC2_PC 
 
+epicsEnvSet DUALGAUGE_INET 141.14.128.45:4007
+epicsEnvSet DUALGAUGE_LINK DUAL_01
+
 cd "${TOP}"
 
 epicsEnvSet "STREAM_PROTOCOL_PATH", "$(TOP)/db"
@@ -37,6 +42,7 @@
 drvAsynIPPortConfigure(${M1900_LINK}, ${M1900_INET}, 0, 0, 0)
 drvAsynIPPortConfigure(${PGC2_MC_LINK}, ${PGC2_MC_INET}, 0, 0, 0)
 drvAsynIPPortConfigure(${PGC2_PC_LINK}, ${PGC2_PC_INET}, 0, 0, 0)
+drvAsynIPPortConfigure(${DUALGAUGE_LINK}, ${DUALGAUGE_INET}, 0, 0, 0)
 
 #drvAsynI2CConfigure( "I2C", "/dev/i2c-1" )
 
@@ -70,6 +76,7 @@
 dbLoadRecords("db/dht.db","P=FHI4KSTM, Q=DHT")
 
 dbLoadTemplate("db/4kStmEuro.sub")
+dbLoadTemplate("db/dualgauge.sub")
 
 dbLoadRecords("db/mtm.db","PORT=MTM, P=FHI4KSTM, Q=MTM")
 dbLoadRecords("db/M1900.db","PORT=M1900, P=FHI4KSTM, Q=M1900")
@@ -86,7 +93,7 @@
 #dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_7,C=7")
 
 #2K translation PVs
-dbLoadRecords("db/2Kstm.db");
+#dbLoadRecords("db/2Kstm.db");
 dbLoadRecords("db/PhotonSTM.db");
 
 
--- a/kstmApp/Db/Makefile	Mon Jun 27 18:08:05 2016 +0200
+++ b/kstmApp/Db/Makefile	Mon Jul 09 13:36:24 2018 +0200
@@ -33,6 +33,10 @@
 
 DB += PhotonSTM.db
 
+DB += dualgauge.sub
+DB += dualgauge.proto
+DB += dualgauge.template
+
 #----------------------------------------------------
 # If <anyname>.db template is not named <anyname>*.template add
 # <anyname>_template = <templatename>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/Db/dualgauge.proto	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,6 @@
+getSensorValue {
+	out "PR\$1\r";
+	in ACK CR 0x00 LF;
+	out ENQ;
+	in "%13c" CR 0x00 LF;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/Db/dualgauge.sub	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,12 @@
+# macros
+# P -> Device
+# R -> PV
+# PORT -> Asyn Link
+# CHA -> Physical Port on the Pfeiffer Maxigauge
+
+file db/dualgauge.template
+{
+	pattern{ P, R, PORT, CHA }
+	{ "FHI4KSTM:DualGauge", "ExchangeGas1", "DUAL_01", "1" }
+	{ "FHI4KSTM:DualGauge", "ExchangeGas2", "DUAL_01", "2" }
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/Db/dualgauge.template	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,22 @@
+record(stringin, "$(P):$(R):getter"){
+	field(DESC, "get Pfeiffer MaxiGauge Sensor Value")
+	field(DTYP, "stream")
+	field(INP, "@dualgauge.proto getSensorValue($(CHA)) $(PORT)")
+	field(SCAN, "1 second")
+	field(FLNK, "$(P):$(R):Status")
+}
+
+record(scalcout, "$(P):$(R):Status"){
+	field(DESC, "extracts the Status from the response")
+	field(INAA, "$(P):$(R):getter")
+	field(CALC, "SSCANF(AA, \"%d%*\")")
+	field(FLNK, "$(P):$(R):Pressure")
+}
+
+record(scalcout, "$(P):$(R):Pressure"){
+	field(DESC, "extracts the Pressure from the response")
+	field(INAA, "$(P):$(R):getter")
+        field(CALC, "SSCANF(AA, \"%*2c%E\")")
+	field(PREC, "12")
+        field(EGU, "mbar")
+}
--- a/kstmApp/src/Makefile	Mon Jun 27 18:08:05 2016 +0200
+++ b/kstmApp/src/Makefile	Mon Jul 09 13:36:24 2018 +0200
@@ -21,6 +21,7 @@
 kstm_DBD += asyn.dbd
 kstm_DBD += drvAsynIPPort.dbd
 kstm_DBD += stream.dbd
+kstm_DBD += calc.dbd
 kstm_DBD += adcPi.dbd
 #kstm_DBD += drvAsynI2C.dbd
 
@@ -28,6 +29,7 @@
 #kstm_LIBS += xxx 
 kstm_LIBS += stream 
 kstm_LIBS += asyn 
+kstm_LIBS += calc
 
 # kstm_registerRecordDeviceDriver.cpp derives from kstm.dbd
 kstm_SRCS += kstm_registerRecordDeviceDriver.cpp
--- a/kstmApp/src/O.Common/kstm.dbd	Mon Jun 27 18:08:05 2016 +0200
+++ b/kstmApp/src/O.Common/kstm.dbd	Mon Jul 09 13:36:24 2018 +0200
@@ -1,34 +1,32 @@
-menu(serialPRTY) {
-    choice(serialPRTY_unknown, "Unknown")
-    choice(serialPRTY_None, "None")
-    choice(serialPRTY_Even, "Even")
-    choice(serialPRTY_Odd, "Odd")
-}
 menu(waveformPOST) {
     choice(waveformPOST_Always, "Always")
     choice(waveformPOST_OnChange, "On Change")
 }
-menu(aaoPOST) {
-    choice(aaoPOST_Always, "Always")
-    choice(aaoPOST_OnChange, "On Change")
-}
-menu(menuPriority) {
-    choice(menuPriorityLOW, "LOW")
-    choice(menuPriorityMEDIUM, "MEDIUM")
-    choice(menuPriorityHIGH, "HIGH")
-}
-menu(serialSBIT) {
-    choice(serialSBIT_unknown, "Unknown")
-    choice(serialSBIT_1, "1")
-    choice(serialSBIT_2, "2")
+menu(sseqWAIT) {
+    choice(sseqWAIT_NoWait, "NoWait")
+    choice(sseqWAIT_Wait, "Wait")
+    choice(sseqWAIT_Wait1, "After1")
+    choice(sseqWAIT_Wait2, "After2")
+    choice(sseqWAIT_Wait3, "After3")
+    choice(sseqWAIT_Wait4, "After4")
+    choice(sseqWAIT_Wait5, "After5")
+    choice(sseqWAIT_Wait6, "After6")
+    choice(sseqWAIT_Wait7, "After7")
+    choice(sseqWAIT_Wait8, "After8")
+    choice(sseqWAIT_Wait9, "After9")
+    choice(sseqWAIT_Wait10, "AfterA")
 }
 menu(calcoutDOPT) {
     choice(calcoutDOPT_Use_VAL, "Use CALC")
     choice(calcoutDOPT_Use_OVAL, "Use OCAL")
 }
-menu(menuOmsl) {
-    choice(menuOmslsupervisory, "supervisory")
-    choice(menuOmslclosed_loop, "closed_loop")
+menu(transformCOPT) {
+    choice(transformCOPT_CONDITIONAL, "Conditional")
+    choice(transformCOPT_ALWAYS, "Always")
+}
+menu(acalcoutSIZE) {
+    choice(acalcoutSIZE_NELM, "NELM")
+    choice(acalcoutSIZE_NUSE, "NUSE")
 }
 menu(menuFtype) {
     choice(menuFtypeSTRING, "STRING")
@@ -42,10 +40,6 @@
     choice(menuFtypeDOUBLE, "DOUBLE")
     choice(menuFtypeENUM, "ENUM")
 }
-menu(stringinPOST) {
-    choice(stringinPOST_OnChange, "On Change")
-    choice(stringinPOST_Always, "Always")
-}
 menu(menuPini) {
     choice(menuPiniNO, "NO")
     choice(menuPiniYES, "YES")
@@ -54,11 +48,6 @@
     choice(menuPiniPAUSE, "PAUSE")
     choice(menuPiniPAUSED, "PAUSED")
 }
-menu(dfanoutSELM) {
-    choice(dfanoutSELM_All, "All")
-    choice(dfanoutSELM_Specified, "Specified")
-    choice(dfanoutSELM_Mask, "Mask")
-}
 menu(menuScan) {
     choice(menuScanPassive, "Passive")
     choice(menuScanEvent, "Event")
@@ -71,35 +60,29 @@
     choice(menuScan_2_second, ".2 second")
     choice(menuScan_1_second, ".1 second")
 }
-menu(gpibACMD) {
-    choice(gpibACMD_None, "None")
-    choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)")
-    choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)")
-    choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)")
-    choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)")
-    choice(gpibACMD_Serial_Poll, "Serial Poll")
-}
 menu(aSubLFLG) {
     choice(aSubLFLG_IGNORE, "IGNORE")
     choice(aSubLFLG_READ, "READ")
 }
-menu(asynTMOD) {
-    choice(asynTMOD_Write_Read, "Write/Read")
-    choice(asynTMOD_Write, "Write")
-    choice(asynTMOD_Read, "Read")
-    choice(asynTMOD_Flush, "Flush")
-    choice(asynTMOD_NoIO, "NoI/O")
+menu(swaitINAV) {
+    choice(swaitINAV_PV_OK, "PV OK")
+    choice(swaitINAV_PV_BAD, "PV BAD")
+    choice(swaitINAV_No_PV, "No PV")
+}
+menu(swaitINAP) {
+    choice(swaitINAP_No, "No")
+    choice(swaitINAP_Yes, "Yes")
+}
+menu(scalcoutINAV) {
+    choice(scalcoutINAV_EXT_NC, "Ext PV NC")
+    choice(scalcoutINAV_EXT, "Ext PV OK")
+    choice(scalcoutINAV_LOC, "Local PV")
+    choice(scalcoutINAV_CON, "Constant")
 }
 menu(menuPost) {
     choice(menuPost_OnChange, "On Change")
     choice(menuPost_Always, "Always")
 }
-menu(asynINTERFACE) {
-    choice(asynINTERFACE_OCTET, "asynOctet")
-    choice(asynINTERFACE_INT32, "asynInt32")
-    choice(asynINTERFACE_UINT32, "asynUInt32Digital")
-    choice(asynINTERFACE_FLOAT64, "asynFloat64")
-}
 menu(menuAlarmStat) {
     choice(menuAlarmStatNO_ALARM, "NO_ALARM")
     choice(menuAlarmStatREAD, "READ")
@@ -124,14 +107,22 @@
     choice(menuAlarmStatREAD_ACCESS, "READ_ACCESS")
     choice(menuAlarmStatWRITE_ACCESS, "WRITE_ACCESS")
 }
+menu(acalcoutINAP) {
+    choice(acalcoutINAP_No, "No PROC on Change")
+    choice(acalcoutINAP_Yes, "PROC on Change")
+}
+menu(scalcoutWAIT) {
+    choice(scalcoutWAIT_NoWait, "NoWait")
+    choice(scalcoutWAIT_Wait, "Wait")
+}
+menu(acalcoutWAIT) {
+    choice(acalcoutWAIT_NoWait, "NoWait")
+    choice(acalcoutWAIT_Wait, "Wait")
+}
 menu(aoOIF) {
     choice(aoOIF_Full, "Full")
     choice(aoOIF_Incremental, "Incremental")
 }
-menu(aaiPOST) {
-    choice(aaiPOST_Always, "Always")
-    choice(aaiPOST_OnChange, "On Change")
-}
 menu(calcoutINAV) {
     choice(calcoutINAV_EXT_NC, "Ext PV NC")
     choice(calcoutINAV_EXT, "Ext PV OK")
@@ -156,14 +147,11 @@
     choice(asynCONNECT_Disconnect, "Disconnect")
     choice(asynCONNECT_Connect, "Connect")
 }
-menu(gpibUCMD) {
-    choice(gpibUCMD_None, "None")
-    choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)")
-    choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)")
-    choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)")
-    choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)")
-    choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)")
-    choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)")
+menu(transformIAV) {
+    choice(transformIAV_EXT_NC, "Ext PV NC")
+    choice(transformIAV_EXT, "Ext PV OK")
+    choice(transformIAV_LOC, "Local PV")
+    choice(transformIAV_CON, "Constant")
 }
 menu(serialBAUD) {
     choice(serialBAUD_unknown, "Unknown")
@@ -208,6 +196,10 @@
     choice(menuIvoaDon_t_drive_outputs, "Don't drive outputs")
     choice(menuIvoaSet_output_to_IVOV, "Set output to IVOV")
 }
+menu(acalcoutDOPT) {
+    choice(acalcoutDOPT_Use_VAL, "Use CALC")
+    choice(acalcoutDOPT_Use_OVAL, "Use OCAL")
+}
 menu(stringoutPOST) {
     choice(stringoutPOST_OnChange, "On Change")
     choice(stringoutPOST_Always, "Always")
@@ -218,50 +210,20 @@
     choice(menuAlarmSevrMAJOR, "MAJOR")
     choice(menuAlarmSevrINVALID, "INVALID")
 }
-menu(serialMCTL) {
-    choice(serialMCTL_unknown, "Unknown")
-    choice(serialMCTL_CLOCAL, "CLOCAL")
-    choice(serialMCTL_Yes, "YES")
-}
-menu(serialFCTL) {
-    choice(serialFCTL_unknown, "Unknown")
-    choice(serialFCTL_None, "None")
-    choice(serialFCTL_Hardware, "Hardware")
+menu(acalcoutINAV) {
+    choice(acalcoutINAV_EXT_NC, "Ext PV NC")
+    choice(acalcoutINAV_EXT, "Ext PV OK")
+    choice(acalcoutINAV_LOC, "Local PV")
+    choice(acalcoutINAV_CON, "Constant")
 }
 menu(menuSimm) {
     choice(menuSimmNO, "NO")
     choice(menuSimmYES, "YES")
     choice(menuSimmRAW, "RAW")
 }
-menu(compressALG) {
-    choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value")
-    choice(compressALG_N_to_1_High_Value, "N to 1 High Value")
-    choice(compressALG_N_to_1_Average, "N to 1 Average")
-    choice(compressALG_Average, "Average")
-    choice(compressALG_Circular_Buffer, "Circular Buffer")
-    choice(compressALG_N_to_1_Median, "N to 1 Median")
-}
-menu(aSubEFLG) {
-    choice(aSubEFLG_NEVER, "NEVER")
-    choice(aSubEFLG_ON_CHANGE, "ON CHANGE")
-    choice(aSubEFLG_ALWAYS, "ALWAYS")
-}
-menu(fanoutSELM) {
-    choice(fanoutSELM_All, "All")
-    choice(fanoutSELM_Specified, "Specified")
-    choice(fanoutSELM_Mask, "Mask")
-}
-menu(calcoutOOPT) {
-    choice(calcoutOOPT_Every_Time, "Every Time")
-    choice(calcoutOOPT_On_Change, "On Change")
-    choice(calcoutOOPT_When_Zero, "When Zero")
-    choice(calcoutOOPT_When_Non_zero, "When Non-zero")
-    choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero")
-    choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero")
-}
-menu(asynENABLE) {
-    choice(asynENABLE_Disable, "Disable")
-    choice(asynENABLE_Enable, "Enable")
+menu(swaitDOPT) {
+    choice(swaitDOPT_Use_VAL, "Use VAL")
+    choice(swaitDOPT_Use_DOL, "Use DOL")
 }
 menu(menuConvert) {
     choice(menuConvertNO_CONVERSION, "NO CONVERSION")
@@ -280,14 +242,14 @@
     choice(menuConverttypeSdegF, "typeSdegF")
     choice(menuConverttypeSdegC, "typeSdegC")
 }
-menu(serialIX) {
-    choice(serialIX_unknown, "Unknown")
-    choice(serialIX_No, "No")
-    choice(serialIX_Yes, "Yes")
-}
-menu(menuYesNo) {
-    choice(menuYesNoNO, "NO")
-    choice(menuYesNoYES, "YES")
+menu(scalcoutOOPT) {
+    choice(scalcoutOOPT_Every_Time, "Every Time")
+    choice(scalcoutOOPT_On_Change, "On Change")
+    choice(scalcoutOOPT_When_Zero, "When Zero")
+    choice(scalcoutOOPT_When_Non_zero, "When Non-zero")
+    choice(scalcoutOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(scalcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+    choice(scalcoutOOPT_Never, "Never")
 }
 menu(serialDBIT) {
     choice(serialDBIT_unknown, "Unknown")
@@ -302,6 +264,1207 @@
     choice(selSELM_Low_Signal, "Low Signal")
     choice(selSELM_Median_Signal, "Median Signal")
 }
+menu(aaoPOST) {
+    choice(aaoPOST_Always, "Always")
+    choice(aaoPOST_OnChange, "On Change")
+}
+menu(serialPRTY) {
+    choice(serialPRTY_unknown, "Unknown")
+    choice(serialPRTY_None, "None")
+    choice(serialPRTY_Even, "Even")
+    choice(serialPRTY_Odd, "Odd")
+}
+menu(menuPriority) {
+    choice(menuPriorityLOW, "LOW")
+    choice(menuPriorityMEDIUM, "MEDIUM")
+    choice(menuPriorityHIGH, "HIGH")
+}
+menu(serialSBIT) {
+    choice(serialSBIT_unknown, "Unknown")
+    choice(serialSBIT_1, "1")
+    choice(serialSBIT_2, "2")
+}
+menu(menuOmsl) {
+    choice(menuOmslsupervisory, "supervisory")
+    choice(menuOmslclosed_loop, "closed_loop")
+}
+menu(stringinPOST) {
+    choice(stringinPOST_OnChange, "On Change")
+    choice(stringinPOST_Always, "Always")
+}
+menu(dfanoutSELM) {
+    choice(dfanoutSELM_All, "All")
+    choice(dfanoutSELM_Specified, "Specified")
+    choice(dfanoutSELM_Mask, "Mask")
+}
+menu(gpibACMD) {
+    choice(gpibACMD_None, "None")
+    choice(gpibACMD_Group_Execute_Trig___GET_, "Group Execute Trig. (GET)")
+    choice(gpibACMD_Go_To_Local__GTL_, "Go To Local (GTL)")
+    choice(gpibACMD_Selected_Dev__Clear__SDC_, "Selected Dev. Clear (SDC)")
+    choice(gpibACMD_Take_Control__TCT_, "Take Control (TCT)")
+    choice(gpibACMD_Serial_Poll, "Serial Poll")
+}
+menu(asynTMOD) {
+    choice(asynTMOD_Write_Read, "Write/Read")
+    choice(asynTMOD_Write, "Write")
+    choice(asynTMOD_Read, "Read")
+    choice(asynTMOD_Flush, "Flush")
+    choice(asynTMOD_NoIO, "NoI/O")
+}
+menu(transformIVLA) {
+    choice(transformIVLA_IGNORE, "Ignore error")
+    choice(transformIVLA_DO_NOTHING, "Do Nothing")
+}
+menu(acalcoutOOPT) {
+    choice(acalcoutOOPT_Every_Time, "Every Time")
+    choice(acalcoutOOPT_On_Change, "On Change")
+    choice(acalcoutOOPT_When_Zero, "When Zero")
+    choice(acalcoutOOPT_When_Non_zero, "When Non-zero")
+    choice(acalcoutOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(acalcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+    choice(acalcoutOOPT_Never, "Never")
+}
+menu(asynINTERFACE) {
+    choice(asynINTERFACE_OCTET, "asynOctet")
+    choice(asynINTERFACE_INT32, "asynInt32")
+    choice(asynINTERFACE_UINT32, "asynUInt32Digital")
+    choice(asynINTERFACE_FLOAT64, "asynFloat64")
+}
+menu(aaiPOST) {
+    choice(aaiPOST_Always, "Always")
+    choice(aaiPOST_OnChange, "On Change")
+}
+menu(scalcoutDOPT) {
+    choice(scalcoutDOPT_Use_VAL, "Use CALC")
+    choice(scalcoutDOPT_Use_OVAL, "Use OCAL")
+}
+menu(gpibUCMD) {
+    choice(gpibUCMD_None, "None")
+    choice(gpibUCMD_Device_Clear__DCL_, "Device Clear (DCL)")
+    choice(gpibUCMD_Local_Lockout__LL0_, "Local Lockout (LL0)")
+    choice(gpibUCMD_Serial_Poll_Disable__SPD_, "Serial Poll Disable (SPD)")
+    choice(gpibUCMD_Serial_Poll_Enable__SPE_, "Serial Poll Enable (SPE)")
+    choice(gpibUCMD_Unlisten__UNL_, "Unlisten (UNL)")
+    choice(gpibUCMD_Untalk__UNT_, "Untalk (UNT)")
+}
+menu(swaitOOPT) {
+    choice(swaitOOPT_Every_Time, "Every Time")
+    choice(swaitOOPT_On_Change, "On Change")
+    choice(swaitOOPT_When_Zero, "When Zero")
+    choice(swaitOOPT_When_Non_zero, "When Non-zero")
+    choice(swaitOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(swaitOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+    choice(swaitOOPT_Never, "Never")
+}
+menu(sseqSELM) {
+    choice(sseqSELM_All, "All")
+    choice(sseqSELM_Specified, "Specified")
+    choice(sseqSELM_Mask, "Mask")
+}
+menu(serialMCTL) {
+    choice(serialMCTL_unknown, "Unknown")
+    choice(serialMCTL_CLOCAL, "CLOCAL")
+    choice(serialMCTL_Yes, "YES")
+}
+menu(scalcoutINAP) {
+    choice(scalcoutINAP_No, "No PROC on Change")
+    choice(scalcoutINAP_Yes, "PROC on Change")
+}
+menu(compressALG) {
+    choice(compressALG_N_to_1_Low_Value, "N to 1 Low Value")
+    choice(compressALG_N_to_1_High_Value, "N to 1 High Value")
+    choice(compressALG_N_to_1_Average, "N to 1 Average")
+    choice(compressALG_Average, "Average")
+    choice(compressALG_Circular_Buffer, "Circular Buffer")
+    choice(compressALG_N_to_1_Median, "N to 1 Median")
+}
+menu(serialFCTL) {
+    choice(serialFCTL_unknown, "Unknown")
+    choice(serialFCTL_None, "None")
+    choice(serialFCTL_Hardware, "Hardware")
+}
+menu(sseqLNKV) {
+    choice(sseqLNKV_EXT_NC, "Ext PV NC")
+    choice(sseqLNKV_EXT, "Ext PV OK")
+    choice(sseqLNKV_LOC, "Local PV")
+    choice(sseqLNKV_CON, "Constant")
+}
+menu(fanoutSELM) {
+    choice(fanoutSELM_All, "All")
+    choice(fanoutSELM_Specified, "Specified")
+    choice(fanoutSELM_Mask, "Mask")
+}
+menu(aSubEFLG) {
+    choice(aSubEFLG_NEVER, "NEVER")
+    choice(aSubEFLG_ON_CHANGE, "ON CHANGE")
+    choice(aSubEFLG_ALWAYS, "ALWAYS")
+}
+menu(calcoutOOPT) {
+    choice(calcoutOOPT_Every_Time, "Every Time")
+    choice(calcoutOOPT_On_Change, "On Change")
+    choice(calcoutOOPT_When_Zero, "When Zero")
+    choice(calcoutOOPT_When_Non_zero, "When Non-zero")
+    choice(calcoutOOPT_Transition_To_Zero, "Transition To Zero")
+    choice(calcoutOOPT_Transition_To_Non_zero, "Transition To Non-zero")
+}
+menu(asynENABLE) {
+    choice(asynENABLE_Disable, "Disable")
+    choice(asynENABLE_Enable, "Enable")
+}
+menu(serialIX) {
+    choice(serialIX_unknown, "Unknown")
+    choice(serialIX_No, "No")
+    choice(serialIX_Yes, "Yes")
+}
+menu(menuYesNo) {
+    choice(menuYesNoNO, "NO")
+    choice(menuYesNoYES, "YES")
+}
+recordtype(sseq) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VAL, DBF_LONG) {
+        asl(ASL0)
+        pp(TRUE)
+        prompt("Used to trigger")
+    }
+    field(SELM, DBF_MENU) {
+        promptgroup(GUI_INPUTS)
+        menu(sseqSELM)
+        interest(1)
+        prompt("Select Mechanism")
+    }
+    field(SELN, DBF_USHORT) {
+        initial("1")
+        interest(1)
+        prompt("Link Selection")
+    }
+    field(SELL, DBF_INLINK) {
+        promptgroup(GUI_INPUTS)
+        interest(1)
+        prompt("Link Selection Loc")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(DLY1, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 1")
+    }
+    field(DOL1, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link1")
+    }
+    field(DO1, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 1")
+    }
+    field(LNK1, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 1")
+    }
+    field(STR1, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 1")
+    }
+    field(DT1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT1, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX1, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("0")
+        interest(2)
+    }
+    field(DOL1V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK1V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY2, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 2")
+    }
+    field(DOL2, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 2")
+    }
+    field(DO2, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 2")
+    }
+    field(LNK2, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 2")
+    }
+    field(STR2, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 2")
+    }
+    field(DT2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT2, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX2, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("1")
+        interest(2)
+    }
+    field(DOL2V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK2V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY3, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 3")
+    }
+    field(DOL3, DBF_INLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 3")
+    }
+    field(DO3, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 3")
+    }
+    field(LNK3, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 3")
+    }
+    field(STR3, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 3")
+    }
+    field(DT3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT3, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX3, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("2")
+        interest(2)
+    }
+    field(DOL3V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK3V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY4, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 4")
+    }
+    field(DOL4, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 4")
+    }
+    field(DO4, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 4")
+    }
+    field(LNK4, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 4")
+    }
+    field(STR4, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 4")
+    }
+    field(DT4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT4, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX4, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("3")
+        interest(2)
+    }
+    field(DOL4V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK4V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY5, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 5")
+    }
+    field(DOL5, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 5")
+    }
+    field(DO5, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 5")
+    }
+    field(LNK5, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 5")
+    }
+    field(STR5, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 5")
+    }
+    field(DT5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT5, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX5, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("4")
+        interest(2)
+    }
+    field(DOL5V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK5V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY6, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 6")
+    }
+    field(DOL6, DBF_INLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 6")
+    }
+    field(DO6, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 6")
+    }
+    field(LNK6, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ2)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 6")
+    }
+    field(STR6, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 6")
+    }
+    field(DT6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT6, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX6, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("5")
+        interest(2)
+    }
+    field(DOL6V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK6V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY7, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 7")
+    }
+    field(DOL7, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 7")
+    }
+    field(DO7, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 7")
+    }
+    field(LNK7, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 7")
+    }
+    field(STR7, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 7")
+    }
+    field(DT7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT7, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX7, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("6")
+        interest(2)
+    }
+    field(DOL7V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK7V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY8, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 8")
+    }
+    field(DOL8, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 8")
+    }
+    field(DO8, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 8")
+    }
+    field(LNK8, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 8")
+    }
+    field(STR8, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 8")
+    }
+    field(DT8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT8, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX8, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("7")
+        interest(2)
+    }
+    field(DOL8V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK8V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLY9, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 9")
+    }
+    field(DOL9, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 9")
+    }
+    field(DO9, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 9")
+    }
+    field(LNK9, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 9")
+    }
+    field(STR9, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value 9")
+    }
+    field(DT9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LT9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAIT9, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERR9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTG9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(IX9, DBF_SHORT) {
+        special(SPC_NOMOD)
+        initial("8")
+        interest(2)
+    }
+    field(DOL9V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNK9V, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(DLYA, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Delay 10")
+    }
+    field(DOLA, DBF_INLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input link 10")
+    }
+    field(DOA, DBF_DOUBLE) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Constant input 10")
+    }
+    field(LNKA, DBF_OUTLINK) {
+        promptgroup(GUI_SEQ3)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link 10")
+    }
+    field(STRA, DBF_STRING) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        interest(4)
+        size(40)
+        prompt("String value A")
+    }
+    field(DTA, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("DOL link type")
+    }
+    field(LTA, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(4)
+        prompt("LNK link type")
+    }
+    field(WAITA, DBF_MENU) {
+        promptgroup(GUI_SEQ1)
+        special(SPC_MOD)
+        menu(sseqWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(WERRA, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+    }
+    field(WTGA, DBF_SHORT) {
+        interest(1)
+    }
+    field(IXA, DBF_SHORT) {
+        initial("9")
+        interest(2)
+    }
+    field(DOLAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("DOL LINK Status")
+    }
+    field(LNKAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(sseqLNKV)
+        initial("1")
+        interest(1)
+        prompt("LNK LINK Status")
+    }
+    field(ABORT, DBF_SHORT) {
+        special(SPC_MOD)
+        interest(1)
+        prompt("Abort sequence")
+    }
+    field(ABORTING, DBF_SHORT) {
+        special(SPC_MOD)
+        interest(1)
+        prompt("Aborting")
+    }
+    field(BUSY, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Sequence active")
+    }
+}
 recordtype(calcout) {
     %#include "epicsTypes.h"
     %#include "link.h"
@@ -10722,6 +11885,758 @@
         prompt("Last Index Monitored")
     }
 }
+recordtype(swait) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_FLOAT) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(HOPR, DBF_FLOAT) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("High Operating Range")
+    }
+    field(LOPR, DBF_FLOAT) {
+        promptgroup(GUI_BITS1)
+        asl(ASL0)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(INIT, DBF_SHORT) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Initialized?")
+    }
+    field(CBST, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *         cbst")
+        interest(4)
+        size(4)
+        prompt("Pointer to cbStruct")
+    }
+    field(INAN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPA PV Name")
+    }
+    field(INBN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPB PV Name")
+    }
+    field(INCN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPC PV Name")
+    }
+    field(INDN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPD PV Name")
+    }
+    field(INEN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPE PV Name")
+    }
+    field(INFN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPF PV Name")
+    }
+    field(INGN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPG PV Name")
+    }
+    field(INHN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPH PV Name")
+    }
+    field(ININ, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPI PV Name")
+    }
+    field(INJN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPJ PV Name")
+    }
+    field(INKN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPK PV Name")
+    }
+    field(INLN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("INPL PV Name")
+    }
+    field(DOLN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("DOL  PV Name")
+    }
+    field(OUTN, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        asl(ASL0)
+        interest(1)
+        size(40)
+        prompt("OUT  PV Name")
+    }
+    field(INAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPA PV Status")
+    }
+    field(INBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPB PV Status")
+    }
+    field(INCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPC PV Status")
+    }
+    field(INDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPD PV Status")
+    }
+    field(INEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPE PV Status")
+    }
+    field(INFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPF PV Status")
+    }
+    field(INGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPG PV Status")
+    }
+    field(INHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPH PV Status")
+    }
+    field(INIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPI PV Status")
+    }
+    field(INJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPJ PV Status")
+    }
+    field(INKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPK PV Status")
+    }
+    field(INLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("INPL PV Status")
+    }
+    field(DOLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("DOL  PV Status")
+    }
+    field(OUTV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(swaitINAV)
+        interest(1)
+        prompt("OUT  PV Status")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(LA, DBF_DOUBLE) {
+        prompt("Last Val of Input A")
+    }
+    field(LB, DBF_DOUBLE) {
+        prompt("Last Val of Input B")
+    }
+    field(LC, DBF_DOUBLE) {
+        prompt("Last Val of Input C")
+    }
+    field(LD, DBF_DOUBLE) {
+        prompt("Last Val of Input D")
+    }
+    field(LE, DBF_DOUBLE) {
+        prompt("Last Val of Input E")
+    }
+    field(LF, DBF_DOUBLE) {
+        prompt("Last Val of Input F")
+    }
+    field(LG, DBF_DOUBLE) {
+        prompt("Last Val of Input G")
+    }
+    field(LH, DBF_DOUBLE) {
+        prompt("Last Val of Input H")
+    }
+    field(LI, DBF_DOUBLE) {
+        prompt("Last Val of Input I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        prompt("Last Val of Input J")
+    }
+    field(LK, DBF_DOUBLE) {
+        prompt("Last Val of Input K")
+    }
+    field(LL, DBF_DOUBLE) {
+        prompt("Last Val of Input L")
+    }
+    field(INAP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPA causes I/O INTR")
+    }
+    field(INBP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPB causes I/O INTR")
+    }
+    field(INCP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPC causes I/O INTR")
+    }
+    field(INDP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPD causes I/O INTR")
+    }
+    field(INEP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPE causes I/O INTR")
+    }
+    field(INFP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPF causes I/O INTR")
+    }
+    field(INGP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPG causes I/O INTR")
+    }
+    field(INHP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPH causes I/O INTR")
+    }
+    field(INIP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPI causes I/O INTR")
+    }
+    field(INJP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPJ causes I/O INTR")
+    }
+    field(INKP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPK causes I/O INTR")
+    }
+    field(INLP, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitINAP)
+        initial("Yes")
+        interest(1)
+        prompt("INPL causes I/O INTR")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CLOCK)
+        special(SPC_CALC)
+        asl(ASL0)
+        initial("0")
+        size(36)
+        prompt("Calculation")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char    rpcl[184]")
+        interest(4)
+        size(184)
+        prompt("Reverse Polish Calc")
+    }
+    field(CLCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Valid")
+    }
+    field(VAL, DBF_DOUBLE) {
+        prompt("Value Field")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        prompt("Old Value")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_COMMON)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(OOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitOOPT)
+        interest(1)
+        prompt("Output Execute Opt")
+    }
+    field(ODLY, DBF_FLOAT) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("Output Execute Delay")
+    }
+    field(DOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(swaitDOPT)
+        interest(1)
+        prompt("Output Data Option")
+    }
+    field(DOLD, DBF_DOUBLE) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        interest(1)
+        prompt("Desired Output Data")
+    }
+    field(OEVT, DBF_USHORT) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        prompt("Event To Issue")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_CLOCK)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(SIOL, DBF_INLINK) {
+        promptgroup(GUI_PULSE)
+        interest(1)
+        prompt("Sim Input Specifctn")
+    }
+    field(SVAL, DBF_DOUBLE) {
+        prompt("Simulation Value")
+    }
+    field(SIML, DBF_INLINK) {
+        promptgroup(GUI_PULSE)
+        interest(1)
+        prompt("Sim Mode Location")
+    }
+    field(SIMM, DBF_MENU) {
+        menu(menuYesNo)
+        interest(1)
+        prompt("Simulation Mode")
+    }
+    field(SIMS, DBF_MENU) {
+        promptgroup(GUI_SELECT)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Sim mode Alarm Svrty")
+    }
+}
+device(swait, CONSTANT, devSWaitIoEvent, "Soft Channel")
 recordtype(bi) {
     %#include "epicsTypes.h"
     %#include "link.h"
@@ -11772,6 +13687,1234 @@
     }
 }
 device(subArray, CONSTANT, devSASoft, "Soft Channel")
+recordtype(transform) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_FLOAT) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *         rpvt")
+        interest(4)
+        size(4)
+        prompt("Record Private")
+    }
+    field(IVLA, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(transformIVLA)
+        initial("0")
+        interest(1)
+        prompt("Invalid link action")
+    }
+    field(COPT, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(transformCOPT)
+        initial("Conditional")
+        interest(1)
+        prompt("Calc option")
+    }
+    field(VAL, DBF_DOUBLE) {
+        prompt("Result")
+    }
+    field(CLCA, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation A")
+    }
+    field(CLCB, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation B")
+    }
+    field(CLCC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation C")
+    }
+    field(CLCD, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation D")
+    }
+    field(CLCE, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation E")
+    }
+    field(CLCF, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation F")
+    }
+    field(CLCG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation G")
+    }
+    field(CLCH, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation H")
+    }
+    field(CLCI, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation I")
+    }
+    field(CLCJ, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation J")
+    }
+    field(CLCK, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation K")
+    }
+    field(CLCL, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation L")
+    }
+    field(CLCM, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation M")
+    }
+    field(CLCN, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation N")
+    }
+    field(CLCO, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation O")
+    }
+    field(CLCP, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        size(120)
+        prompt("Calculation P")
+    }
+    field(CAV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CBV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CDV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CEV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CFV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CGV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CHV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CIV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CJV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CKV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CLV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CMV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CNV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(COV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(CPV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Invalid")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input L")
+    }
+    field(INPM, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input M")
+    }
+    field(INPN, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input N")
+    }
+    field(INPO, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input O")
+    }
+    field(INPP, DBF_INLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input P")
+    }
+    field(OUTA, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output A")
+    }
+    field(OUTB, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output B")
+    }
+    field(OUTC, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output C")
+    }
+    field(OUTD, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output D")
+    }
+    field(OUTE, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output E")
+    }
+    field(OUTF, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output F")
+    }
+    field(OUTG, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output G")
+    }
+    field(OUTH, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output H")
+    }
+    field(OUTI, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output I")
+    }
+    field(OUTJ, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output J")
+    }
+    field(OUTK, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output K")
+    }
+    field(OUTL, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output L")
+    }
+    field(OUTM, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output M")
+    }
+    field(OUTN, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output N")
+    }
+    field(OUTO, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output O")
+    }
+    field(OUTP, DBF_OUTLINK) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output P")
+    }
+    field(EGU, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_COMMON)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(A, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of A")
+    }
+    field(B, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of B")
+    }
+    field(C, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of C")
+    }
+    field(D, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of D")
+    }
+    field(E, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of E")
+    }
+    field(F, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of F")
+    }
+    field(G, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of G")
+    }
+    field(H, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of H")
+    }
+    field(I, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of I")
+    }
+    field(J, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of J")
+    }
+    field(K, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of K")
+    }
+    field(L, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of L")
+    }
+    field(M, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of M")
+    }
+    field(N, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of N")
+    }
+    field(O, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of O")
+    }
+    field(P, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        special(SPC_MOD)
+        pp(TRUE)
+        prompt("Value of P")
+    }
+    field(LA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(LB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(LC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(LD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(LE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(LF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(LG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(LH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(LI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(LJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(LK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(LL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(LM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of M")
+    }
+    field(LN, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of N")
+    }
+    field(LO, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of O")
+    }
+    field(LP, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of P")
+    }
+    field(RPCA, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpca[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc A")
+    }
+    field(RPCB, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcb[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc B")
+    }
+    field(RPCC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcc[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc C")
+    }
+    field(RPCD, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcd[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc D")
+    }
+    field(RPCE, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpce[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc E")
+    }
+    field(RPCF, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcf[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc F")
+    }
+    field(RPCG, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcg[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc G")
+    }
+    field(RPCH, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpch[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc H")
+    }
+    field(RPCI, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpci[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc I")
+    }
+    field(RPCJ, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcj[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc J")
+    }
+    field(RPCK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpck[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc K")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcl[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc L")
+    }
+    field(RPCM, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcm[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc M")
+    }
+    field(RPCN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcn[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc N")
+    }
+    field(RPCO, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpco[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc O")
+    }
+    field(RPCP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcp[SCALC_INFIX_TO_POSTFIX_SIZE(120)]")
+        interest(4)
+        prompt("Postfix Calc P")
+    }
+    field(CMTA, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment A")
+    }
+    field(CMTB, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment B")
+    }
+    field(CMTC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment C")
+    }
+    field(CMTD, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment D")
+    }
+    field(CMTE, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment E")
+    }
+    field(CMTF, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment F")
+    }
+    field(CMTG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment G")
+    }
+    field(CMTH, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment H")
+    }
+    field(CMTI, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment I")
+    }
+    field(CMTJ, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment J")
+    }
+    field(CMTK, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment K")
+    }
+    field(CMTL, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment L")
+    }
+    field(CMTM, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment M")
+    }
+    field(CMTN, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment N")
+    }
+    field(CMTO, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment O")
+    }
+    field(CMTP, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(39)
+        prompt("Comment P")
+    }
+    field(MAP, DBF_SHORT) {
+        promptgroup(GUI_COMMON)
+        interest(3)
+        prompt("Input bitmap")
+    }
+    field(IAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(ICV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(ILV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IMV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(INV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IOV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(IPV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Input link valid")
+    }
+    field(OAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(ODV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OMV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(ONV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OOV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+    field(OPV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(transformIAV)
+        initial("1")
+        interest(1)
+        prompt("Output link valid")
+    }
+}
 recordtype(calc) {
     %#include "epicsTypes.h"
     %#include "link.h"
@@ -12807,6 +15950,1057 @@
 device(mbboDirect, CONSTANT, devMbboDirectSoftCallback, "Async Soft Channel")
 device(mbboDirect, INST_IO, asynMbboDirectUInt32Digital, "asynUInt32Digital")
 device(mbboDirect, INST_IO, devmbboDirectStream, "stream")
+recordtype(acalcout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *rpvt")
+        interest(4)
+        size(4)
+        prompt("Record Private")
+    }
+    field(VAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Result")
+    }
+    field(AVAL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *aval")
+        pp(TRUE)
+        prompt("Array Value")
+    }
+    field(NELM, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_NOMOD)
+        initial("1")
+        interest(1)
+        prompt("Number of Elements")
+    }
+    field(NUSE, DBF_ULONG) {
+        promptgroup(GUI_WAVE)
+        special(SPC_MOD)
+        initial("0")
+        interest(1)
+        pp(TRUE)
+        prompt("# elem's in use")
+    }
+    field(PVAL, DBF_DOUBLE) {
+        prompt("Previous Value")
+    }
+    field(PAVL, DBF_NOACCESS) {
+        asl(ASL0)
+        extra("double *pavl")
+        pp(TRUE)
+        prompt("Prev. Array Value")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Calculation")
+    }
+    field(CLCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Valid")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input L")
+    }
+    field(INAA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input AA")
+    }
+    field(INBB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input BB")
+    }
+    field(INCC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input CC")
+    }
+    field(INDD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input DD")
+    }
+    field(INEE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input EE")
+    }
+    field(INFF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input FF")
+    }
+    field(INGG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input GG")
+    }
+    field(INHH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input HH")
+    }
+    field(INII, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input II")
+    }
+    field(INJJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input JJ")
+    }
+    field(INKK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input KK")
+    }
+    field(INLL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Array input LL")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link")
+    }
+    field(INAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPA PV Status")
+    }
+    field(INBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPB PV Status")
+    }
+    field(INCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPC PV Status")
+    }
+    field(INDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPD PV Status")
+    }
+    field(INEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPE PV Status")
+    }
+    field(INFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPF PV Status")
+    }
+    field(INGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPG PV Status")
+    }
+    field(INHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPH PV Status")
+    }
+    field(INIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPI PV Status")
+    }
+    field(INJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPJ PV Status")
+    }
+    field(INKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPK PV Status")
+    }
+    field(INLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPL PV Status")
+    }
+    field(IAAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INAA PV Status")
+    }
+    field(IBBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INBB PV Status")
+    }
+    field(ICCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INCC PV Status")
+    }
+    field(IDDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INDD PV Status")
+    }
+    field(IEEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INEE PV Status")
+    }
+    field(IFFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INFF PV Status")
+    }
+    field(IGGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INGG PV Status")
+    }
+    field(IHHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INHH PV Status")
+    }
+    field(IIIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INII PV Status")
+    }
+    field(IJJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INJJ PV Status")
+    }
+    field(IKKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INKK PV Status")
+    }
+    field(ILLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INLL PV Status")
+    }
+    field(OUTV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(acalcoutINAV)
+        interest(1)
+        prompt("OUT PV Status")
+    }
+    field(OOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(acalcoutOOPT)
+        interest(1)
+        prompt("Output Execute Opt")
+    }
+    field(ODLY, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("Output Execute Delay")
+    }
+    field(WAIT, DBF_MENU) {
+        menu(acalcoutWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(DLYA, DBF_USHORT) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("Output Delay Active")
+    }
+    field(DOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(acalcoutDOPT)
+        interest(1)
+        prompt("Output Data Opt")
+    }
+    field(OCAL, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Output Calculation")
+    }
+    field(OCLV, DBF_LONG) {
+        interest(1)
+        prompt("OCAL Valid")
+    }
+    field(OEVT, DBF_USHORT) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        prompt("Event To Issue")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+    field(EGU, DBF_STRING) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(AA, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *aa")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(BB, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *bb")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(CC, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *cc")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(DD, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *dd")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(EE, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ee")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(FF, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ff")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(GG, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *gg")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(HH, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *hh")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(II, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ii")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(JJ, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *jj")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(KK, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *kk")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(LL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *ll")
+        pp(TRUE)
+        prompt("Value of array input")
+    }
+    field(PAA, DBF_NOACCESS) {
+        asl(ASL0)
+        extra("double *paa")
+        prompt("Prev Val of array input")
+    }
+    field(NEWM, DBF_ULONG) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("new array value mask")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Output Value")
+    }
+    field(OAV, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        asl(ASL0)
+        extra("double *oav")
+        pp(TRUE)
+        prompt("Output array value")
+    }
+    field(POAV, DBF_NOACCESS) {
+        asl(ASL0)
+        extra("double *poav")
+        pp(TRUE)
+        prompt("Output array value")
+    }
+    field(PA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(PB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(PC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(PD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(PE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(PF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(PG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(PH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(PI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(PJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(PK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(PL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(POVL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Prev Value of OVAL")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcl[282]")
+        interest(4)
+        prompt("Reverse Polish Calc")
+    }
+    field(ORPC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char orpc[282]")
+        interest(4)
+        prompt("Reverse Polish OCalc")
+    }
+    field(CACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Calc active")
+    }
+    field(CSTAT, DBF_LONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Calc status")
+    }
+    field(AMASK, DBF_ULONG) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Array mod")
+    }
+    field(SIZE, DBF_MENU) {
+        menu(acalcoutSIZE)
+        interest(1)
+        prompt("Array size reported to clients")
+    }
+}
+device(acalcout, CONSTANT, devaCalcoutSoft, "Soft Channel")
 recordtype(longout) {
     %#include "epicsTypes.h"
     %#include "link.h"
@@ -13240,6 +17434,1108 @@
 device(longout, INST_IO, asynLoInt32, "asynInt32")
 device(longout, INST_IO, asynLoUInt32Digital, "asynUInt32Digital")
 device(longout, INST_IO, devlongoutStream, "stream")
+recordtype(scalcout) {
+    %#include "epicsTypes.h"
+    %#include "link.h"
+    %#include "epicsMutex.h"
+    %#include "ellLib.h"
+    %#include "epicsTime.h"
+    field(NAME, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(61)
+        prompt("Record Name")
+    }
+    field(DESC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        size(41)
+        prompt("Descriptor")
+    }
+    field(ASG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        special(SPC_AS)
+        size(29)
+        prompt("Access Security Group")
+    }
+    field(SCAN, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuScan)
+        interest(1)
+        prompt("Scan Mechanism")
+    }
+    field(PINI, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuPini)
+        interest(1)
+        prompt("Process at iocInit")
+    }
+    field(PHAS, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        prompt("Scan Phase")
+    }
+    field(EVNT, DBF_STRING) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        interest(1)
+        size(40)
+        prompt("Event Name")
+    }
+    field(TSE, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Event")
+    }
+    field(TSEL, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Time Stamp Link")
+    }
+    field(DTYP, DBF_DEVICE) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Device Type")
+    }
+    field(DISV, DBF_SHORT) {
+        promptgroup(GUI_SCAN)
+        initial("1")
+        prompt("Disable Value")
+    }
+    field(DISA, DBF_SHORT) {
+        prompt("Disable")
+    }
+    field(SDIS, DBF_INLINK) {
+        promptgroup(GUI_SCAN)
+        interest(1)
+        prompt("Scanning Disable")
+    }
+    field(MLOK, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsMutexId        mlok")
+        interest(4)
+        prompt("Monitor lock")
+    }
+    field(MLIS, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("ELLLIST             mlis")
+        interest(4)
+        prompt("Monitor List")
+    }
+    field(DISP, DBF_UCHAR) {
+        prompt("Disable putField")
+    }
+    field(PROC, DBF_UCHAR) {
+        interest(3)
+        pp(TRUE)
+        prompt("Force Processing")
+    }
+    field(STAT, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        initial("UDF")
+        prompt("Alarm Status")
+    }
+    field(SEVR, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        prompt("Alarm Severity")
+    }
+    field(NSTA, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmStat)
+        interest(2)
+        prompt("New Alarm Status")
+    }
+    field(NSEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("New Alarm Severity")
+    }
+    field(ACKS, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(menuAlarmSevr)
+        interest(2)
+        prompt("Alarm Ack Severity")
+    }
+    field(ACKT, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        special(SPC_NOMOD)
+        menu(menuYesNo)
+        initial("YES")
+        interest(2)
+        prompt("Alarm Ack Transient")
+    }
+    field(DISS, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        menu(menuAlarmSevr)
+        interest(1)
+        prompt("Disable Alarm Sevrty")
+    }
+    field(LCNT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(2)
+        prompt("Lock Count")
+    }
+    field(PACT, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Record active")
+    }
+    field(PUTF, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("dbPutField process")
+    }
+    field(RPRO, DBF_UCHAR) {
+        special(SPC_NOMOD)
+        interest(1)
+        prompt("Reprocess ")
+    }
+    field(ASP, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct asgMember    *asp")
+        interest(4)
+        prompt("Access Security Pvt")
+    }
+    field(PPN, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotify *ppn")
+        interest(4)
+        prompt("pprocessNotify")
+    }
+    field(PPNR, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct processNotifyRecord *ppnr")
+        interest(4)
+        prompt("pprocessNotifyRecord")
+    }
+    field(SPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct scan_element *spvt")
+        interest(4)
+        prompt("Scan Private")
+    }
+    field(RSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct rset         *rset")
+        interest(4)
+        prompt("Address of RSET")
+    }
+    field(DSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dset         *dset")
+        interest(4)
+        prompt("DSET address")
+    }
+    field(DPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void                *dpvt")
+        interest(4)
+        prompt("Device Private")
+    }
+    field(RDES, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct dbRecordType *rdes")
+        interest(4)
+        prompt("Address of dbRecordType")
+    }
+    field(LSET, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("struct lockRecord   *lset")
+        interest(4)
+        prompt("Lock Set")
+    }
+    field(PRIO, DBF_MENU) {
+        promptgroup(GUI_SCAN)
+        special(SPC_SCAN)
+        menu(menuPriority)
+        interest(1)
+        prompt("Scheduling Priority")
+    }
+    field(TPRO, DBF_UCHAR) {
+        prompt("Trace Processing")
+    }
+    field(BKPT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("char                bkpt")
+        interest(1)
+        prompt("Break Point")
+    }
+    field(UDF, DBF_UCHAR) {
+        promptgroup(GUI_COMMON)
+        initial("1")
+        interest(1)
+        pp(TRUE)
+        prompt("Undefined")
+    }
+    field(UDFS, DBF_MENU) {
+        promptgroup(GUI_COMMON)
+        menu(menuAlarmSevr)
+        initial("INVALID")
+        interest(1)
+        prompt("Undefined Alarm Sevrty")
+    }
+    field(TIME, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("epicsTimeStamp      time")
+        interest(2)
+        prompt("Time")
+    }
+    field(FLNK, DBF_FWDLINK) {
+        promptgroup(GUI_LINKS)
+        interest(1)
+        prompt("Forward Process Link")
+    }
+    field(VERS, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        initial("1")
+        prompt("Code Version")
+    }
+    field(RPVT, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("void *rpvt")
+        interest(4)
+        size(4)
+        prompt("Record Private")
+    }
+    field(VAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Result")
+    }
+    field(SVAL, DBF_STRING) {
+        asl(ASL0)
+        size(40)
+        prompt("String result")
+    }
+    field(PVAL, DBF_DOUBLE) {
+        prompt("Previous Value")
+    }
+    field(PSVL, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(40)
+        prompt("Previous string result")
+    }
+    field(CALC, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Calculation")
+    }
+    field(CLCV, DBF_LONG) {
+        interest(1)
+        prompt("CALC Valid")
+    }
+    field(INPA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input A")
+    }
+    field(INPB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input B")
+    }
+    field(INPC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input C")
+    }
+    field(INPD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input D")
+    }
+    field(INPE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input E")
+    }
+    field(INPF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input F")
+    }
+    field(INPG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input G")
+    }
+    field(INPH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input H")
+    }
+    field(INPI, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input I")
+    }
+    field(INPJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input J")
+    }
+    field(INPK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input K")
+    }
+    field(INPL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Input L")
+    }
+    field(INAA, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input AA")
+    }
+    field(INBB, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input BB")
+    }
+    field(INCC, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input CC")
+    }
+    field(INDD, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input DD")
+    }
+    field(INEE, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input EE")
+    }
+    field(INFF, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input FF")
+    }
+    field(INGG, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input GG")
+    }
+    field(INHH, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input HH")
+    }
+    field(INII, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input II")
+    }
+    field(INJJ, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input JJ")
+    }
+    field(INKK, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input KK")
+    }
+    field(INLL, DBF_INLINK) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        interest(1)
+        prompt("String input LL")
+    }
+    field(OUT, DBF_OUTLINK) {
+        promptgroup(GUI_OUTPUT)
+        special(SPC_MOD)
+        interest(1)
+        prompt("Output Link")
+    }
+    field(INAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPA PV Status")
+    }
+    field(INBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPB PV Status")
+    }
+    field(INCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPC PV Status")
+    }
+    field(INDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPD PV Status")
+    }
+    field(INEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPE PV Status")
+    }
+    field(INFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPF PV Status")
+    }
+    field(INGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPG PV Status")
+    }
+    field(INHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPH PV Status")
+    }
+    field(INIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPI PV Status")
+    }
+    field(INJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPJ PV Status")
+    }
+    field(INKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPK PV Status")
+    }
+    field(INLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INPL PV Status")
+    }
+    field(IAAV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INAA PV Status")
+    }
+    field(IBBV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INBB PV Status")
+    }
+    field(ICCV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INCC PV Status")
+    }
+    field(IDDV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INDD PV Status")
+    }
+    field(IEEV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INEE PV Status")
+    }
+    field(IFFV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INFF PV Status")
+    }
+    field(IGGV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INGG PV Status")
+    }
+    field(IHHV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INHH PV Status")
+    }
+    field(IIIV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INII PV Status")
+    }
+    field(IJJV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INJJ PV Status")
+    }
+    field(IKKV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INKK PV Status")
+    }
+    field(ILLV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        initial("1")
+        interest(1)
+        prompt("INLL PV Status")
+    }
+    field(OUTV, DBF_MENU) {
+        special(SPC_NOMOD)
+        menu(scalcoutINAV)
+        interest(1)
+        prompt("OUT PV Status")
+    }
+    field(OOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(scalcoutOOPT)
+        interest(1)
+        prompt("Output Execute Opt")
+    }
+    field(ODLY, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        asl(ASL0)
+        interest(1)
+        prompt("Output Execute Delay")
+    }
+    field(WAIT, DBF_MENU) {
+        menu(scalcoutWAIT)
+        interest(1)
+        prompt("Wait for completion?")
+    }
+    field(DLYA, DBF_USHORT) {
+        special(SPC_NOMOD)
+        asl(ASL0)
+        prompt("Output Delay Active")
+    }
+    field(DOPT, DBF_MENU) {
+        promptgroup(GUI_CALC)
+        menu(scalcoutDOPT)
+        interest(1)
+        prompt("Output Data Opt")
+    }
+    field(OCAL, DBF_STRING) {
+        promptgroup(GUI_CALC)
+        special(SPC_MOD)
+        pp(TRUE)
+        size(80)
+        prompt("Output Calculation")
+    }
+    field(OCLV, DBF_LONG) {
+        interest(1)
+        prompt("OCAL Valid")
+    }
+    field(OEVT, DBF_USHORT) {
+        promptgroup(GUI_CLOCK)
+        asl(ASL0)
+        prompt("Event To Issue")
+    }
+    field(IVOA, DBF_MENU) {
+        promptgroup(GUI_OUTPUT)
+        menu(menuIvoa)
+        interest(2)
+        prompt("INVALID output action")
+    }
+    field(IVOV, DBF_DOUBLE) {
+        promptgroup(GUI_OUTPUT)
+        interest(2)
+        prompt("INVALID output value")
+    }
+    field(EGU, DBF_STRING) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        size(16)
+        prompt("Units Name")
+    }
+    field(PREC, DBF_SHORT) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Display Precision")
+    }
+    field(HOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("High Operating Rng")
+    }
+    field(LOPR, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Low Operating Range")
+    }
+    field(HIHI, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Alarm Limit")
+    }
+    field(LOLO, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Alarm Limit")
+    }
+    field(HIGH, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("High Alarm Limit")
+    }
+    field(LOW, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Alarm Limit")
+    }
+    field(HHSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Hihi Severity")
+    }
+    field(LLSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Lolo Severity")
+    }
+    field(HSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("High Severity")
+    }
+    field(LSV, DBF_MENU) {
+        promptgroup(GUI_ALARMS)
+        menu(menuAlarmSevr)
+        interest(1)
+        pp(TRUE)
+        prompt("Low Severity")
+    }
+    field(HYST, DBF_DOUBLE) {
+        promptgroup(GUI_ALARMS)
+        interest(1)
+        prompt("Alarm Deadband")
+    }
+    field(ADEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Archive Deadband")
+    }
+    field(MDEL, DBF_DOUBLE) {
+        promptgroup(GUI_DISPLAY)
+        interest(1)
+        prompt("Monitor Deadband")
+    }
+    field(A, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input A")
+    }
+    field(B, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input B")
+    }
+    field(C, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input C")
+    }
+    field(D, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input D")
+    }
+    field(E, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input E")
+    }
+    field(F, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input F")
+    }
+    field(G, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input G")
+    }
+    field(H, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input H")
+    }
+    field(I, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input I")
+    }
+    field(J, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input J")
+    }
+    field(K, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input K")
+    }
+    field(L, DBF_DOUBLE) {
+        promptgroup(GUI_COMMON)
+        pp(TRUE)
+        prompt("Value of Input L")
+    }
+    field(STRS, DBF_NOACCESS) {
+        extra("char **strs")
+        interest(4)
+        size(4)
+        prompt("Array of string pointers")
+    }
+    field(AA, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input AA")
+    }
+    field(BB, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input BB")
+    }
+    field(CC, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input CC")
+    }
+    field(DD, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input DD")
+    }
+    field(EE, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input EE")
+    }
+    field(FF, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input FF")
+    }
+    field(GG, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input GG")
+    }
+    field(HH, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input HH")
+    }
+    field(II, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input II")
+    }
+    field(JJ, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input JJ")
+    }
+    field(KK, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input KK")
+    }
+    field(LL, DBF_STRING) {
+        promptgroup(GUI_COMMON)
+        interest(4)
+        pp(TRUE)
+        size(40)
+        prompt("Value of string input LL")
+    }
+    field(PAA, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *paa")
+        interest(4)
+        size(4)
+        prompt("Prev Value of AA")
+    }
+    field(PBB, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pbb")
+        interest(4)
+        size(4)
+        prompt("Prev Value of BB")
+    }
+    field(PCC, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pcc")
+        interest(4)
+        size(4)
+        prompt("Prev Value of CC")
+    }
+    field(PDD, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pdd")
+        interest(4)
+        size(4)
+        prompt("Prev Value of DD")
+    }
+    field(PEE, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pee")
+        interest(4)
+        size(4)
+        prompt("Prev Value of EE")
+    }
+    field(PFF, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pff")
+        interest(4)
+        size(4)
+        prompt("Prev Value of FF")
+    }
+    field(PGG, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pgg")
+        interest(4)
+        size(4)
+        prompt("Prev Value of GG")
+    }
+    field(PHH, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *phh")
+        interest(4)
+        size(4)
+        prompt("Prev Value of HH")
+    }
+    field(PII, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pii")
+        interest(4)
+        size(4)
+        prompt("Prev Value of II")
+    }
+    field(PJJ, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pjj")
+        interest(4)
+        size(4)
+        prompt("Prev Value of JJ")
+    }
+    field(PKK, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pkk")
+        interest(4)
+        size(4)
+        prompt("Prev Value of KK")
+    }
+    field(PLL, DBF_NOACCESS) {
+        special(SPC_DBADDR)
+        extra("char *pll")
+        interest(4)
+        size(4)
+        prompt("Prev Value of LL")
+    }
+    field(OVAL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Output Value")
+    }
+    field(OSV, DBF_STRING) {
+        asl(ASL0)
+        size(40)
+        prompt("Output string value")
+    }
+    field(POSV, DBF_STRING) {
+        special(SPC_NOMOD)
+        size(40)
+        prompt("Previous output string value")
+    }
+    field(PA, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of A")
+    }
+    field(PB, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of B")
+    }
+    field(PC, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of C")
+    }
+    field(PD, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of D")
+    }
+    field(PE, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of E")
+    }
+    field(PF, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of F")
+    }
+    field(PG, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of G")
+    }
+    field(PH, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of H")
+    }
+    field(PI, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of I")
+    }
+    field(PJ, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of J")
+    }
+    field(PK, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of K")
+    }
+    field(PL, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Prev Value of L")
+    }
+    field(POVL, DBF_DOUBLE) {
+        asl(ASL0)
+        prompt("Prev Value of OVAL")
+    }
+    field(LALM, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Alarmed")
+    }
+    field(ALST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Value Archived")
+    }
+    field(MLST, DBF_DOUBLE) {
+        special(SPC_NOMOD)
+        interest(3)
+        prompt("Last Val Monitored")
+    }
+    field(RPCL, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char rpcl[282]")
+        interest(4)
+        prompt("Postfix Calc")
+    }
+    field(ORPC, DBF_NOACCESS) {
+        special(SPC_NOMOD)
+        extra("unsigned char orpc[282]")
+        interest(4)
+        prompt("Postfix OCalc")
+    }
+}
+device(scalcout, CONSTANT, devsCalcoutSoft, "Soft Channel")
 recordtype(aSub) {
     %#include "epicsTypes.h"
     %#include "link.h"
@@ -16653,33 +21949,56 @@
 driver(adcPi)
 driver(stream)
 driver(drvAsyn)
-registrar(adcPiRegister)
+registrar(tsInitialize)
+registrar(subAveRegister)
+registrar(syncInitialize)
+registrar(asynRegister)
+registrar(interpRegister)
+registrar(asynInterposeFlushRegister)
 registrar(drvAsynIPPortRegisterCommands)
-registrar(tsInitialize)
+registrar(adcPiRegister)
 registrar(arrInitialize)
 registrar(streamRegistrar)
-registrar(syncInitialize)
 registrar(dbndInitialize)
-registrar(asynRegister)
 registrar(drvAsynIPServerPortRegisterCommands)
+registrar(arrayTestRegister)
 registrar(asSub)
-registrar(asynInterposeFlushRegister)
 registrar(asynInterposeEosRegister)
+registrar(editSseqRegistrar)
 function(aSubReadDHTInit)
 function(aSubReadDHTProcess)
-variable(dbTemplateMaxVars, int)
-variable(asCaDebug, int)
 variable(callbackParallelThreadsDefault, int)
-variable(dbRecordsOnceOnly, int)
-variable(streamDebug, int)
-variable(calcoutODLYlimit, double)
-variable(adcPiDebug, int)
+variable(aCalcAsyncThreshold, int)
+variable(devsCalcoutSoftDebug, int)
 variable(dbBptNotMonotonic, int)
 variable(boHIGHlimit, double)
 variable(atExitDebug, int)
+variable(devaCalcoutSoftDebug, int)
+variable(sCalcStackHW, int)
+variable(sCalcoutRecordDebug, int)
+variable(sCalcPerformDebug, int)
+variable(seqDLYlimit, double)
+variable(aSubReadDHTDebug, int)
+variable(swaitRecordDebug, int)
+variable(sCalcStackLW, int)
+variable(sCalcPostfixDebug, int)
+variable(histogramSDELprecision, int)
+variable(sseqRecDebug, int)
+variable(aCalcLoopMax, int)
+variable(dbTemplateMaxVars, int)
+variable(asCaDebug, int)
+variable(sCalcLoopMax, int)
+variable(dbRecordsOnceOnly, int)
+variable(transformRecordDebug, int)
+variable(aCalcPostfixDebug, int)
+variable(calcoutODLYlimit, double)
+variable(streamDebug, int)
+variable(arrayTestDebug, int)
+variable(adcPiDebug, int)
+variable(interpDebug, int)
+variable(debugSubAve, int)
 variable(seqDLYprecision, int)
 variable(boHIGHprecision, int)
-variable(seqDLYlimit, double)
-variable(aSubReadDHTDebug, int)
 variable(calcoutODLYprecision, int)
-variable(histogramSDELprecision, int)
+variable(aCalcPerformDebug, int)
+variable(aCalcoutRecordDebug, int)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/Makefile	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,10 @@
+#This Makefile created by makeMakefile.pl
+
+
+all :
+	$(MAKE) -f ../Makefile TOP=../../.. T_A=linux-arm  $@
+
+.DEFAULT: force
+	$(MAKE) -f ../Makefile TOP=../../.. T_A=linux-arm  $@
+
+force:  ;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/aSubReadDHT.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,19 @@
+aSubReadDHT.o: ../aSubReadDHT.c /home/epics//EPICS/base/include/dbDefs.h \
+ /home/epics//EPICS/base/include/registryFunction.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/subRecord.h \
+ /home/epics//EPICS/base/include/epicsTypes.h \
+ /home/epics//EPICS/base/include/compilerDependencies.h \
+ /home/epics//EPICS/base/include/compiler/gcc/compilerSpecific.h \
+ /home/epics//EPICS/base/include/link.h \
+ /home/epics//EPICS/base/include/dbDefs.h \
+ /home/epics//EPICS/base/include/epicsMutex.h \
+ /home/epics//EPICS/base/include/epicsAssert.h \
+ /home/epics//EPICS/base/include/os/Linux/osdMutex.h \
+ /home/epics//EPICS/base/include/ellLib.h \
+ /home/epics//EPICS/base/include/epicsTime.h \
+ /home/epics//EPICS/base/include/os/Linux/osdTime.h \
+ /home/epics//EPICS/base/include/aSubRecord.h \
+ /home/epics//EPICS/base/include/epicsExport.h \
+ /home/epics//EPICS/base/include/shareLib.h ../pi_2_dht_read.h \
+ ../common_dht_read.h
Binary file kstmApp/src/O.linux-arm/aSubReadDHT.o has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/common_dht_read.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,1 @@
+common_dht_read.o: ../common_dht_read.c ../common_dht_read.h
Binary file kstmApp/src/O.linux-arm/common_dht_read.o has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/devAdcPi.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,26 @@
+devAdcPi.o: ../devAdcPi.c /home/epics//EPICS/base/include/devSup.h \
+ /home/epics//EPICS/base/include/errMdef.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/recGbl.h \
+ /home/epics//EPICS/base/include/epicsTypes.h \
+ /home/epics//EPICS/base/include/compilerDependencies.h \
+ /home/epics//EPICS/base/include/compiler/gcc/compilerSpecific.h \
+ /home/epics//EPICS/base/include/alarm.h \
+ /home/epics//EPICS/base/include/errlog.h \
+ /home/epics//EPICS/base/include/aiRecord.h \
+ /home/epics//EPICS/base/include/link.h \
+ /home/epics//EPICS/base/include/dbDefs.h \
+ /home/epics//EPICS/base/include/epicsMutex.h \
+ /home/epics//EPICS/base/include/epicsAssert.h \
+ /home/epics//EPICS/base/include/os/Linux/osdMutex.h \
+ /home/epics//EPICS/base/include/ellLib.h \
+ /home/epics//EPICS/base/include/epicsTime.h \
+ /home/epics//EPICS/base/include/os/Linux/osdTime.h \
+ /home/epics//EPICS/base/include/epicsExport.h \
+ /home/epics//EPICS/base/include/shareLib.h ../drvAdcPi.h \
+ /home/epics//EPICS/base/include/epicsTypes.h \
+ /home/epics//EPICS/base/include/devLib.h \
+ /home/epics//EPICS/base/include/devLibVME.h \
+ /home/epics//EPICS/base/include/os/Linux/osdVME.h \
+ /home/epics//EPICS/base/include/devLib.h \
+ /home/epics//EPICS/base/include/devLibVMEImpl.h
Binary file kstmApp/src/O.linux-arm/devAdcPi.o has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/drvAdcPi.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,24 @@
+drvAdcPi.o: ../drvAdcPi.c /home/epics//EPICS/base/include/epicsThread.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/os/Linux/osdThread.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/ellLib.h \
+ /home/epics//EPICS/base/include/epicsEvent.h \
+ /home/epics//EPICS/base/include/os/Linux/osdEvent.h \
+ /home/epics//EPICS/base/include/epicsTime.h \
+ /home/epics//EPICS/base/include/epicsTypes.h \
+ /home/epics//EPICS/base/include/compilerDependencies.h \
+ /home/epics//EPICS/base/include/compiler/gcc/compilerSpecific.h \
+ /home/epics//EPICS/base/include/os/Linux/osdTime.h \
+ /home/epics//EPICS/base/include/epicsTypes.h \
+ /home/epics//EPICS/base/include/devLib.h \
+ /home/epics//EPICS/base/include/devLibVME.h \
+ /home/epics//EPICS/base/include/dbDefs.h \
+ /home/epics//EPICS/base/include/os/Linux/osdVME.h \
+ /home/epics//EPICS/base/include/errMdef.h \
+ /home/epics//EPICS/base/include/devLib.h \
+ /home/epics//EPICS/base/include/devLibVMEImpl.h \
+ /home/epics//EPICS/base/include/drvSup.h \
+ /home/epics//EPICS/base/include/epicsExport.h \
+ /home/epics//EPICS/base/include/errlog.h \
+ /home/epics//EPICS/base/include/iocsh.h ../drvAdcPi.h
Binary file kstmApp/src/O.linux-arm/drvAdcPi.o has changed
Binary file kstmApp/src/O.linux-arm/kstm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/kstm.dbd.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,158 @@
+../O.Common/kstm.dbd: /home/epics//EPICS/base/dbd/base.dbd \
+    /home/epics//EPICS/base/dbd/menuGlobal.dbd \
+    /home/epics//EPICS/base/dbd/menuAlarmSevr.dbd \
+    /home/epics//EPICS/base/dbd/menuAlarmStat.dbd \
+    /home/epics//EPICS/base/dbd/menuFtype.dbd \
+    /home/epics//EPICS/base/dbd/menuIvoa.dbd \
+    /home/epics//EPICS/base/dbd/menuOmsl.dbd \
+    /home/epics//EPICS/base/dbd/menuPini.dbd \
+    /home/epics//EPICS/base/dbd/menuPost.dbd \
+    /home/epics//EPICS/base/dbd/menuPriority.dbd \
+    /home/epics//EPICS/base/dbd/menuYesNo.dbd \
+    /home/epics//EPICS/base/dbd/menuSimm.dbd \
+    /home/epics//EPICS/base/dbd/menuConvert.dbd \
+    /home/epics//EPICS/base/dbd/menuScan.dbd \
+    /home/epics//EPICS/base/dbd/stdRecords.dbd \
+    /home/epics//EPICS/base/dbd/aaiRecord.dbd \
+    /home/epics//EPICS/base/dbd/dbCommon.dbd \
+    /home/epics//EPICS/base/dbd/aaoRecord.dbd \
+    /home/epics//EPICS/base/dbd/aiRecord.dbd \
+    /home/epics//EPICS/base/dbd/aoRecord.dbd \
+    /home/epics//EPICS/base/dbd/aSubRecord.dbd \
+    /home/epics//EPICS/base/dbd/biRecord.dbd \
+    /home/epics//EPICS/base/dbd/boRecord.dbd \
+    /home/epics//EPICS/base/dbd/calcRecord.dbd \
+    /home/epics//EPICS/base/dbd/calcoutRecord.dbd \
+    /home/epics//EPICS/base/dbd/compressRecord.dbd \
+    /home/epics//EPICS/base/dbd/dfanoutRecord.dbd \
+    /home/epics//EPICS/base/dbd/eventRecord.dbd \
+    /home/epics//EPICS/base/dbd/fanoutRecord.dbd \
+    /home/epics//EPICS/base/dbd/histogramRecord.dbd \
+    /home/epics//EPICS/base/dbd/longinRecord.dbd \
+    /home/epics//EPICS/base/dbd/longoutRecord.dbd \
+    /home/epics//EPICS/base/dbd/lsiRecord.dbd \
+    /home/epics//EPICS/base/dbd/lsoRecord.dbd \
+    /home/epics//EPICS/base/dbd/mbbiRecord.dbd \
+    /home/epics//EPICS/base/dbd/mbbiDirectRecord.dbd \
+    /home/epics//EPICS/base/dbd/mbboRecord.dbd \
+    /home/epics//EPICS/base/dbd/mbboDirectRecord.dbd \
+    /home/epics//EPICS/base/dbd/permissiveRecord.dbd \
+    /home/epics//EPICS/base/dbd/printfRecord.dbd \
+    /home/epics//EPICS/base/dbd/selRecord.dbd \
+    /home/epics//EPICS/base/dbd/seqRecord.dbd \
+    /home/epics//EPICS/base/dbd/stateRecord.dbd \
+    /home/epics//EPICS/base/dbd/stringinRecord.dbd \
+    /home/epics//EPICS/base/dbd/stringoutRecord.dbd \
+    /home/epics//EPICS/base/dbd/subRecord.dbd \
+    /home/epics//EPICS/base/dbd/subArrayRecord.dbd \
+    /home/epics//EPICS/base/dbd/waveformRecord.dbd \
+    /home/epics//EPICS/base/dbd/filters.dbd \
+    /home/epics//EPICS/base/dbd/devSoft.dbd \
+    /home/epics//EPICS/base/dbd/asSub.dbd \
+    /home/epics//EPICS/base/dbd/dbCore.dbd \
+    ../aSubReadDHT.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/asyn.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/asynRecord.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devEpics.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynOctet.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynInt32.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynInt8Array.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynInt16Array.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynInt32Array.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynInt32TimeSeries.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat64.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat32Array.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat64Array.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat64TimeSeries.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynUInt32Digital.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/devAsynRecord.dbd \
+    /home/epics//EPICS/support/asyn4-26/dbd/drvAsynIPPort.dbd \
+    /home/epics//EPICS/support/stream/dbd/stream.dbd \
+    /home/epics//EPICS/support/calc-3-4-2/dbd/calc.dbd \
+    /home/epics//EPICS/support/calc-3-4-2/dbd/transformRecord.dbd \
+    /home/epics//EPICS/support/calc-3-4-2/dbd/sCalcoutRecord.dbd \
+    /home/epics//EPICS/support/calc-3-4-2/dbd/aCalcoutRecord.dbd \
+    /home/epics//EPICS/support/calc-3-4-2/dbd/sseqRecord.dbd \
+    /home/epics//EPICS/support/calc-3-4-2/dbd/swaitRecord.dbd \
+    /home/epics//EPICS/support/calc-3-4-2/dbd/editSseq.dbd \
+    ../adcPi.dbd
+
+/home/epics//EPICS/base/dbd/base.dbd:
+/home/epics//EPICS/base/dbd/menuGlobal.dbd:
+/home/epics//EPICS/base/dbd/menuAlarmSevr.dbd:
+/home/epics//EPICS/base/dbd/menuAlarmStat.dbd:
+/home/epics//EPICS/base/dbd/menuFtype.dbd:
+/home/epics//EPICS/base/dbd/menuIvoa.dbd:
+/home/epics//EPICS/base/dbd/menuOmsl.dbd:
+/home/epics//EPICS/base/dbd/menuPini.dbd:
+/home/epics//EPICS/base/dbd/menuPost.dbd:
+/home/epics//EPICS/base/dbd/menuPriority.dbd:
+/home/epics//EPICS/base/dbd/menuYesNo.dbd:
+/home/epics//EPICS/base/dbd/menuSimm.dbd:
+/home/epics//EPICS/base/dbd/menuConvert.dbd:
+/home/epics//EPICS/base/dbd/menuScan.dbd:
+/home/epics//EPICS/base/dbd/stdRecords.dbd:
+/home/epics//EPICS/base/dbd/aaiRecord.dbd:
+/home/epics//EPICS/base/dbd/dbCommon.dbd:
+/home/epics//EPICS/base/dbd/aaoRecord.dbd:
+/home/epics//EPICS/base/dbd/aiRecord.dbd:
+/home/epics//EPICS/base/dbd/aoRecord.dbd:
+/home/epics//EPICS/base/dbd/aSubRecord.dbd:
+/home/epics//EPICS/base/dbd/biRecord.dbd:
+/home/epics//EPICS/base/dbd/boRecord.dbd:
+/home/epics//EPICS/base/dbd/calcRecord.dbd:
+/home/epics//EPICS/base/dbd/calcoutRecord.dbd:
+/home/epics//EPICS/base/dbd/compressRecord.dbd:
+/home/epics//EPICS/base/dbd/dfanoutRecord.dbd:
+/home/epics//EPICS/base/dbd/eventRecord.dbd:
+/home/epics//EPICS/base/dbd/fanoutRecord.dbd:
+/home/epics//EPICS/base/dbd/histogramRecord.dbd:
+/home/epics//EPICS/base/dbd/longinRecord.dbd:
+/home/epics//EPICS/base/dbd/longoutRecord.dbd:
+/home/epics//EPICS/base/dbd/lsiRecord.dbd:
+/home/epics//EPICS/base/dbd/lsoRecord.dbd:
+/home/epics//EPICS/base/dbd/mbbiRecord.dbd:
+/home/epics//EPICS/base/dbd/mbbiDirectRecord.dbd:
+/home/epics//EPICS/base/dbd/mbboRecord.dbd:
+/home/epics//EPICS/base/dbd/mbboDirectRecord.dbd:
+/home/epics//EPICS/base/dbd/permissiveRecord.dbd:
+/home/epics//EPICS/base/dbd/printfRecord.dbd:
+/home/epics//EPICS/base/dbd/selRecord.dbd:
+/home/epics//EPICS/base/dbd/seqRecord.dbd:
+/home/epics//EPICS/base/dbd/stateRecord.dbd:
+/home/epics//EPICS/base/dbd/stringinRecord.dbd:
+/home/epics//EPICS/base/dbd/stringoutRecord.dbd:
+/home/epics//EPICS/base/dbd/subRecord.dbd:
+/home/epics//EPICS/base/dbd/subArrayRecord.dbd:
+/home/epics//EPICS/base/dbd/waveformRecord.dbd:
+/home/epics//EPICS/base/dbd/filters.dbd:
+/home/epics//EPICS/base/dbd/devSoft.dbd:
+/home/epics//EPICS/base/dbd/asSub.dbd:
+/home/epics//EPICS/base/dbd/dbCore.dbd:
+../aSubReadDHT.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/asyn.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/asynRecord.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devEpics.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynOctet.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynInt32.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynInt8Array.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynInt16Array.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynInt32Array.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynInt32TimeSeries.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat64.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat32Array.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat64Array.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynFloat64TimeSeries.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynUInt32Digital.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/devAsynRecord.dbd:
+/home/epics//EPICS/support/asyn4-26/dbd/drvAsynIPPort.dbd:
+/home/epics//EPICS/support/stream/dbd/stream.dbd:
+/home/epics//EPICS/support/calc-3-4-2/dbd/calc.dbd:
+/home/epics//EPICS/support/calc-3-4-2/dbd/transformRecord.dbd:
+/home/epics//EPICS/support/calc-3-4-2/dbd/sCalcoutRecord.dbd:
+/home/epics//EPICS/support/calc-3-4-2/dbd/aCalcoutRecord.dbd:
+/home/epics//EPICS/support/calc-3-4-2/dbd/sseqRecord.dbd:
+/home/epics//EPICS/support/calc-3-4-2/dbd/swaitRecord.dbd:
+/home/epics//EPICS/support/calc-3-4-2/dbd/editSseq.dbd:
+../adcPi.dbd:
+../O.Common/kstm.dbd: ../Makefile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/kstmMain.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,15 @@
+kstmMain.o: ../kstmMain.cpp /home/epics//EPICS/base/include/epicsExit.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/epicsThread.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/epicsEvent.h \
+ /home/epics//EPICS/base/include/os/Linux/osdEvent.h \
+ /home/epics//EPICS/base/include/epicsMutex.h \
+ /home/epics//EPICS/base/include/epicsAssert.h \
+ /home/epics//EPICS/base/include/compilerDependencies.h \
+ /home/epics//EPICS/base/include/compiler/gcc/compilerSpecific.h \
+ /home/epics//EPICS/base/include/os/Linux/osdMutex.h \
+ /home/epics//EPICS/base/include/os/Linux/osdThread.h \
+ /home/epics//EPICS/base/include/ellLib.h \
+ /home/epics//EPICS/base/include/epicsEvent.h \
+ /home/epics//EPICS/base/include/iocsh.h
Binary file kstmApp/src/O.linux-arm/kstmMain.o has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/kstm_registerRecordDeviceDriver.cpp	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,430 @@
+/* THIS IS A GENERATED FILE. DO NOT EDIT! */
+/* Generated from ../O.Common/kstm.dbd */
+
+#include <string.h>
+
+#include "epicsStdlib.h"
+#include "iocsh.h"
+#include "iocshRegisterCommon.h"
+#include "registryCommon.h"
+
+extern "C" {
+
+epicsShareExtern rset *pvar_rset_aSubRSET, *pvar_rset_aaiRSET,
+    *pvar_rset_aaoRSET, *pvar_rset_acalcoutRSET, *pvar_rset_aiRSET,
+    *pvar_rset_aoRSET, *pvar_rset_asynRSET, *pvar_rset_biRSET,
+    *pvar_rset_boRSET, *pvar_rset_calcRSET, *pvar_rset_calcoutRSET,
+    *pvar_rset_compressRSET, *pvar_rset_dfanoutRSET, *pvar_rset_eventRSET,
+    *pvar_rset_fanoutRSET, *pvar_rset_histogramRSET,
+    *pvar_rset_longinRSET, *pvar_rset_longoutRSET, *pvar_rset_lsiRSET,
+    *pvar_rset_lsoRSET, *pvar_rset_mbbiRSET, *pvar_rset_mbbiDirectRSET,
+    *pvar_rset_mbboRSET, *pvar_rset_mbboDirectRSET,
+    *pvar_rset_permissiveRSET, *pvar_rset_printfRSET,
+    *pvar_rset_scalcoutRSET, *pvar_rset_selRSET, *pvar_rset_seqRSET,
+    *pvar_rset_sseqRSET, *pvar_rset_stateRSET, *pvar_rset_stringinRSET,
+    *pvar_rset_stringoutRSET, *pvar_rset_subRSET, *pvar_rset_subArrayRSET,
+    *pvar_rset_swaitRSET, *pvar_rset_transformRSET,
+    *pvar_rset_waveformRSET;
+
+typedef int (*rso_func)(dbRecordType *pdbRecordType);
+epicsShareExtern rso_func pvar_func_aSubRecordSizeOffset,
+    pvar_func_aaiRecordSizeOffset, pvar_func_aaoRecordSizeOffset,
+    pvar_func_acalcoutRecordSizeOffset, pvar_func_aiRecordSizeOffset,
+    pvar_func_aoRecordSizeOffset, pvar_func_asynRecordSizeOffset,
+    pvar_func_biRecordSizeOffset, pvar_func_boRecordSizeOffset,
+    pvar_func_calcRecordSizeOffset, pvar_func_calcoutRecordSizeOffset,
+    pvar_func_compressRecordSizeOffset, pvar_func_dfanoutRecordSizeOffset,
+    pvar_func_eventRecordSizeOffset, pvar_func_fanoutRecordSizeOffset,
+    pvar_func_histogramRecordSizeOffset, pvar_func_longinRecordSizeOffset,
+    pvar_func_longoutRecordSizeOffset, pvar_func_lsiRecordSizeOffset,
+    pvar_func_lsoRecordSizeOffset, pvar_func_mbbiRecordSizeOffset,
+    pvar_func_mbbiDirectRecordSizeOffset, pvar_func_mbboRecordSizeOffset,
+    pvar_func_mbboDirectRecordSizeOffset,
+    pvar_func_permissiveRecordSizeOffset,
+    pvar_func_printfRecordSizeOffset, pvar_func_scalcoutRecordSizeOffset,
+    pvar_func_selRecordSizeOffset, pvar_func_seqRecordSizeOffset,
+    pvar_func_sseqRecordSizeOffset, pvar_func_stateRecordSizeOffset,
+    pvar_func_stringinRecordSizeOffset,
+    pvar_func_stringoutRecordSizeOffset, pvar_func_subRecordSizeOffset,
+    pvar_func_subArrayRecordSizeOffset, pvar_func_swaitRecordSizeOffset,
+    pvar_func_transformRecordSizeOffset,
+    pvar_func_waveformRecordSizeOffset;
+
+static const char * const recordTypeNames[] = {
+    "aSub", "aai", "aao", "acalcout", "ai", "ao", "asyn", "bi", "bo",
+    "calc", "calcout", "compress", "dfanout", "event", "fanout",
+    "histogram", "longin", "longout", "lsi", "lso", "mbbi", "mbbiDirect",
+    "mbbo", "mbboDirect", "permissive", "printf", "scalcout", "sel",
+    "seq", "sseq", "state", "stringin", "stringout", "sub", "subArray",
+    "swait", "transform", "waveform"
+};
+
+static const recordTypeLocation rtl[] = {
+    {pvar_rset_aSubRSET, pvar_func_aSubRecordSizeOffset},
+    {pvar_rset_aaiRSET, pvar_func_aaiRecordSizeOffset},
+    {pvar_rset_aaoRSET, pvar_func_aaoRecordSizeOffset},
+    {pvar_rset_acalcoutRSET, pvar_func_acalcoutRecordSizeOffset},
+    {pvar_rset_aiRSET, pvar_func_aiRecordSizeOffset},
+    {pvar_rset_aoRSET, pvar_func_aoRecordSizeOffset},
+    {pvar_rset_asynRSET, pvar_func_asynRecordSizeOffset},
+    {pvar_rset_biRSET, pvar_func_biRecordSizeOffset},
+    {pvar_rset_boRSET, pvar_func_boRecordSizeOffset},
+    {pvar_rset_calcRSET, pvar_func_calcRecordSizeOffset},
+    {pvar_rset_calcoutRSET, pvar_func_calcoutRecordSizeOffset},
+    {pvar_rset_compressRSET, pvar_func_compressRecordSizeOffset},
+    {pvar_rset_dfanoutRSET, pvar_func_dfanoutRecordSizeOffset},
+    {pvar_rset_eventRSET, pvar_func_eventRecordSizeOffset},
+    {pvar_rset_fanoutRSET, pvar_func_fanoutRecordSizeOffset},
+    {pvar_rset_histogramRSET, pvar_func_histogramRecordSizeOffset},
+    {pvar_rset_longinRSET, pvar_func_longinRecordSizeOffset},
+    {pvar_rset_longoutRSET, pvar_func_longoutRecordSizeOffset},
+    {pvar_rset_lsiRSET, pvar_func_lsiRecordSizeOffset},
+    {pvar_rset_lsoRSET, pvar_func_lsoRecordSizeOffset},
+    {pvar_rset_mbbiRSET, pvar_func_mbbiRecordSizeOffset},
+    {pvar_rset_mbbiDirectRSET, pvar_func_mbbiDirectRecordSizeOffset},
+    {pvar_rset_mbboRSET, pvar_func_mbboRecordSizeOffset},
+    {pvar_rset_mbboDirectRSET, pvar_func_mbboDirectRecordSizeOffset},
+    {pvar_rset_permissiveRSET, pvar_func_permissiveRecordSizeOffset},
+    {pvar_rset_printfRSET, pvar_func_printfRecordSizeOffset},
+    {pvar_rset_scalcoutRSET, pvar_func_scalcoutRecordSizeOffset},
+    {pvar_rset_selRSET, pvar_func_selRecordSizeOffset},
+    {pvar_rset_seqRSET, pvar_func_seqRecordSizeOffset},
+    {pvar_rset_sseqRSET, pvar_func_sseqRecordSizeOffset},
+    {pvar_rset_stateRSET, pvar_func_stateRecordSizeOffset},
+    {pvar_rset_stringinRSET, pvar_func_stringinRecordSizeOffset},
+    {pvar_rset_stringoutRSET, pvar_func_stringoutRecordSizeOffset},
+    {pvar_rset_subRSET, pvar_func_subRecordSizeOffset},
+    {pvar_rset_subArrayRSET, pvar_func_subArrayRecordSizeOffset},
+    {pvar_rset_swaitRSET, pvar_func_swaitRecordSizeOffset},
+    {pvar_rset_transformRSET, pvar_func_transformRecordSizeOffset},
+    {pvar_rset_waveformRSET, pvar_func_waveformRecordSizeOffset}
+};
+
+epicsShareExtern dset *pvar_dset_devAaiSoft, *pvar_dset_devaaiStream,
+    *pvar_dset_devAaoSoft, *pvar_dset_devaaoStream,
+    *pvar_dset_devaCalcoutSoft, *pvar_dset_devAiSoft,
+    *pvar_dset_devAiSoftRaw, *pvar_dset_devAiSoftCallback,
+    *pvar_dset_devTimestampAI, *pvar_dset_devAiGeneralTime,
+    *pvar_dset_asynAiInt32, *pvar_dset_asynAiInt32Average,
+    *pvar_dset_asynAiFloat64, *pvar_dset_asynAiFloat64Average,
+    *pvar_dset_devaiStream, *pvar_dset_adcPiAi, *pvar_dset_devAoSoft,
+    *pvar_dset_devAoSoftRaw, *pvar_dset_devAoSoftCallback,
+    *pvar_dset_asynAoInt32, *pvar_dset_asynAoFloat64,
+    *pvar_dset_devaoStream, *pvar_dset_asynRecordDevice,
+    *pvar_dset_devBiSoft, *pvar_dset_devBiSoftRaw,
+    *pvar_dset_devBiSoftCallback, *pvar_dset_devBiDbState,
+    *pvar_dset_asynBiInt32, *pvar_dset_asynBiUInt32Digital,
+    *pvar_dset_devbiStream, *pvar_dset_devBoSoft, *pvar_dset_devBoSoftRaw,
+    *pvar_dset_devBoSoftCallback, *pvar_dset_devBoGeneralTime,
+    *pvar_dset_devBoDbState, *pvar_dset_asynBoInt32,
+    *pvar_dset_asynBoUInt32Digital, *pvar_dset_devboStream,
+    *pvar_dset_devCalcoutSoft, *pvar_dset_devCalcoutSoftCallback,
+    *pvar_dset_devcalcoutStream, *pvar_dset_devEventSoft,
+    *pvar_dset_devHistogramSoft, *pvar_dset_devLiSoft,
+    *pvar_dset_devLiSoftCallback, *pvar_dset_devLiGeneralTime,
+    *pvar_dset_asynLiInt32, *pvar_dset_asynLiUInt32Digital,
+    *pvar_dset_devlonginStream, *pvar_dset_devLoSoft,
+    *pvar_dset_devLoSoftCallback, *pvar_dset_asynLoInt32,
+    *pvar_dset_asynLoUInt32Digital, *pvar_dset_devlongoutStream,
+    *pvar_dset_devLsiSoft, *pvar_dset_devLsoSoft,
+    *pvar_dset_devLsoSoftCallback, *pvar_dset_devLsoStdio,
+    *pvar_dset_devMbbiSoft, *pvar_dset_devMbbiSoftRaw,
+    *pvar_dset_devMbbiSoftCallback, *pvar_dset_asynMbbiInt32,
+    *pvar_dset_asynMbbiUInt32Digital, *pvar_dset_devmbbiStream,
+    *pvar_dset_devMbbiDirectSoft, *pvar_dset_devMbbiDirectSoftRaw,
+    *pvar_dset_devMbbiDirectSoftCallback,
+    *pvar_dset_asynMbbiDirectUInt32Digital,
+    *pvar_dset_devmbbiDirectStream, *pvar_dset_devMbboSoft,
+    *pvar_dset_devMbboSoftRaw, *pvar_dset_devMbboSoftCallback,
+    *pvar_dset_asynMbboInt32, *pvar_dset_asynMbboUInt32Digital,
+    *pvar_dset_devmbboStream, *pvar_dset_devMbboDirectSoft,
+    *pvar_dset_devMbboDirectSoftRaw, *pvar_dset_devMbboDirectSoftCallback,
+    *pvar_dset_asynMbboDirectUInt32Digital,
+    *pvar_dset_devmbboDirectStream, *pvar_dset_devPrintfSoft,
+    *pvar_dset_devPrintfSoftCallback, *pvar_dset_devPrintfStdio,
+    *pvar_dset_devsCalcoutSoft, *pvar_dset_devSiSoft,
+    *pvar_dset_devSiSoftCallback, *pvar_dset_devTimestampSI,
+    *pvar_dset_devSiGeneralTime, *pvar_dset_asynSiOctetCmdResponse,
+    *pvar_dset_asynSiOctetWriteRead, *pvar_dset_asynSiOctetRead,
+    *pvar_dset_devstringinStream, *pvar_dset_devSoSoft,
+    *pvar_dset_devSoSoftCallback, *pvar_dset_devSoStdio,
+    *pvar_dset_asynSoOctetWrite, *pvar_dset_devstringoutStream,
+    *pvar_dset_devSASoft, *pvar_dset_devSWaitIoEvent,
+    *pvar_dset_devWfSoft, *pvar_dset_asynWfOctetCmdResponse,
+    *pvar_dset_asynWfOctetWriteRead, *pvar_dset_asynWfOctetRead,
+    *pvar_dset_asynWfOctetWrite, *pvar_dset_asynInt8ArrayWfIn,
+    *pvar_dset_asynInt8ArrayWfOut, *pvar_dset_asynInt16ArrayWfIn,
+    *pvar_dset_asynInt16ArrayWfOut, *pvar_dset_asynInt32ArrayWfIn,
+    *pvar_dset_asynInt32ArrayWfOut, *pvar_dset_asynInt32TimeSeries,
+    *pvar_dset_asynFloat32ArrayWfIn, *pvar_dset_asynFloat32ArrayWfOut,
+    *pvar_dset_asynFloat64ArrayWfIn, *pvar_dset_asynFloat64ArrayWfOut,
+    *pvar_dset_asynFloat64TimeSeries, *pvar_dset_devwaveformStream;
+
+static const char * const deviceSupportNames[] = {
+    "devAaiSoft", "devaaiStream", "devAaoSoft", "devaaoStream",
+    "devaCalcoutSoft", "devAiSoft", "devAiSoftRaw", "devAiSoftCallback",
+    "devTimestampAI", "devAiGeneralTime", "asynAiInt32",
+    "asynAiInt32Average", "asynAiFloat64", "asynAiFloat64Average",
+    "devaiStream", "adcPiAi", "devAoSoft", "devAoSoftRaw",
+    "devAoSoftCallback", "asynAoInt32", "asynAoFloat64", "devaoStream",
+    "asynRecordDevice", "devBiSoft", "devBiSoftRaw", "devBiSoftCallback",
+    "devBiDbState", "asynBiInt32", "asynBiUInt32Digital", "devbiStream",
+    "devBoSoft", "devBoSoftRaw", "devBoSoftCallback", "devBoGeneralTime",
+    "devBoDbState", "asynBoInt32", "asynBoUInt32Digital", "devboStream",
+    "devCalcoutSoft", "devCalcoutSoftCallback", "devcalcoutStream",
+    "devEventSoft", "devHistogramSoft", "devLiSoft", "devLiSoftCallback",
+    "devLiGeneralTime", "asynLiInt32", "asynLiUInt32Digital",
+    "devlonginStream", "devLoSoft", "devLoSoftCallback", "asynLoInt32",
+    "asynLoUInt32Digital", "devlongoutStream", "devLsiSoft", "devLsoSoft",
+    "devLsoSoftCallback", "devLsoStdio", "devMbbiSoft", "devMbbiSoftRaw",
+    "devMbbiSoftCallback", "asynMbbiInt32", "asynMbbiUInt32Digital",
+    "devmbbiStream", "devMbbiDirectSoft", "devMbbiDirectSoftRaw",
+    "devMbbiDirectSoftCallback", "asynMbbiDirectUInt32Digital",
+    "devmbbiDirectStream", "devMbboSoft", "devMbboSoftRaw",
+    "devMbboSoftCallback", "asynMbboInt32", "asynMbboUInt32Digital",
+    "devmbboStream", "devMbboDirectSoft", "devMbboDirectSoftRaw",
+    "devMbboDirectSoftCallback", "asynMbboDirectUInt32Digital",
+    "devmbboDirectStream", "devPrintfSoft", "devPrintfSoftCallback",
+    "devPrintfStdio", "devsCalcoutSoft", "devSiSoft", "devSiSoftCallback",
+    "devTimestampSI", "devSiGeneralTime", "asynSiOctetCmdResponse",
+    "asynSiOctetWriteRead", "asynSiOctetRead", "devstringinStream",
+    "devSoSoft", "devSoSoftCallback", "devSoStdio", "asynSoOctetWrite",
+    "devstringoutStream", "devSASoft", "devSWaitIoEvent", "devWfSoft",
+    "asynWfOctetCmdResponse", "asynWfOctetWriteRead", "asynWfOctetRead",
+    "asynWfOctetWrite", "asynInt8ArrayWfIn", "asynInt8ArrayWfOut",
+    "asynInt16ArrayWfIn", "asynInt16ArrayWfOut", "asynInt32ArrayWfIn",
+    "asynInt32ArrayWfOut", "asynInt32TimeSeries", "asynFloat32ArrayWfIn",
+    "asynFloat32ArrayWfOut", "asynFloat64ArrayWfIn",
+    "asynFloat64ArrayWfOut", "asynFloat64TimeSeries", "devwaveformStream"
+};
+
+static const dset * const devsl[] = {
+    pvar_dset_devAaiSoft, pvar_dset_devaaiStream, pvar_dset_devAaoSoft,
+    pvar_dset_devaaoStream, pvar_dset_devaCalcoutSoft,
+    pvar_dset_devAiSoft, pvar_dset_devAiSoftRaw,
+    pvar_dset_devAiSoftCallback, pvar_dset_devTimestampAI,
+    pvar_dset_devAiGeneralTime, pvar_dset_asynAiInt32,
+    pvar_dset_asynAiInt32Average, pvar_dset_asynAiFloat64,
+    pvar_dset_asynAiFloat64Average, pvar_dset_devaiStream,
+    pvar_dset_adcPiAi, pvar_dset_devAoSoft, pvar_dset_devAoSoftRaw,
+    pvar_dset_devAoSoftCallback, pvar_dset_asynAoInt32,
+    pvar_dset_asynAoFloat64, pvar_dset_devaoStream,
+    pvar_dset_asynRecordDevice, pvar_dset_devBiSoft,
+    pvar_dset_devBiSoftRaw, pvar_dset_devBiSoftCallback,
+    pvar_dset_devBiDbState, pvar_dset_asynBiInt32,
+    pvar_dset_asynBiUInt32Digital, pvar_dset_devbiStream,
+    pvar_dset_devBoSoft, pvar_dset_devBoSoftRaw,
+    pvar_dset_devBoSoftCallback, pvar_dset_devBoGeneralTime,
+    pvar_dset_devBoDbState, pvar_dset_asynBoInt32,
+    pvar_dset_asynBoUInt32Digital, pvar_dset_devboStream,
+    pvar_dset_devCalcoutSoft, pvar_dset_devCalcoutSoftCallback,
+    pvar_dset_devcalcoutStream, pvar_dset_devEventSoft,
+    pvar_dset_devHistogramSoft, pvar_dset_devLiSoft,
+    pvar_dset_devLiSoftCallback, pvar_dset_devLiGeneralTime,
+    pvar_dset_asynLiInt32, pvar_dset_asynLiUInt32Digital,
+    pvar_dset_devlonginStream, pvar_dset_devLoSoft,
+    pvar_dset_devLoSoftCallback, pvar_dset_asynLoInt32,
+    pvar_dset_asynLoUInt32Digital, pvar_dset_devlongoutStream,
+    pvar_dset_devLsiSoft, pvar_dset_devLsoSoft,
+    pvar_dset_devLsoSoftCallback, pvar_dset_devLsoStdio,
+    pvar_dset_devMbbiSoft, pvar_dset_devMbbiSoftRaw,
+    pvar_dset_devMbbiSoftCallback, pvar_dset_asynMbbiInt32,
+    pvar_dset_asynMbbiUInt32Digital, pvar_dset_devmbbiStream,
+    pvar_dset_devMbbiDirectSoft, pvar_dset_devMbbiDirectSoftRaw,
+    pvar_dset_devMbbiDirectSoftCallback,
+    pvar_dset_asynMbbiDirectUInt32Digital, pvar_dset_devmbbiDirectStream,
+    pvar_dset_devMbboSoft, pvar_dset_devMbboSoftRaw,
+    pvar_dset_devMbboSoftCallback, pvar_dset_asynMbboInt32,
+    pvar_dset_asynMbboUInt32Digital, pvar_dset_devmbboStream,
+    pvar_dset_devMbboDirectSoft, pvar_dset_devMbboDirectSoftRaw,
+    pvar_dset_devMbboDirectSoftCallback,
+    pvar_dset_asynMbboDirectUInt32Digital, pvar_dset_devmbboDirectStream,
+    pvar_dset_devPrintfSoft, pvar_dset_devPrintfSoftCallback,
+    pvar_dset_devPrintfStdio, pvar_dset_devsCalcoutSoft,
+    pvar_dset_devSiSoft, pvar_dset_devSiSoftCallback,
+    pvar_dset_devTimestampSI, pvar_dset_devSiGeneralTime,
+    pvar_dset_asynSiOctetCmdResponse, pvar_dset_asynSiOctetWriteRead,
+    pvar_dset_asynSiOctetRead, pvar_dset_devstringinStream,
+    pvar_dset_devSoSoft, pvar_dset_devSoSoftCallback,
+    pvar_dset_devSoStdio, pvar_dset_asynSoOctetWrite,
+    pvar_dset_devstringoutStream, pvar_dset_devSASoft,
+    pvar_dset_devSWaitIoEvent, pvar_dset_devWfSoft,
+    pvar_dset_asynWfOctetCmdResponse, pvar_dset_asynWfOctetWriteRead,
+    pvar_dset_asynWfOctetRead, pvar_dset_asynWfOctetWrite,
+    pvar_dset_asynInt8ArrayWfIn, pvar_dset_asynInt8ArrayWfOut,
+    pvar_dset_asynInt16ArrayWfIn, pvar_dset_asynInt16ArrayWfOut,
+    pvar_dset_asynInt32ArrayWfIn, pvar_dset_asynInt32ArrayWfOut,
+    pvar_dset_asynInt32TimeSeries, pvar_dset_asynFloat32ArrayWfIn,
+    pvar_dset_asynFloat32ArrayWfOut, pvar_dset_asynFloat64ArrayWfIn,
+    pvar_dset_asynFloat64ArrayWfOut, pvar_dset_asynFloat64TimeSeries,
+    pvar_dset_devwaveformStream
+};
+
+epicsShareExtern drvet *pvar_drvet_adcPi, *pvar_drvet_drvAsyn,
+    *pvar_drvet_stream;
+
+static const char *driverSupportNames[] = {
+    "adcPi", "drvAsyn", "stream"};
+
+static struct drvet *drvsl[] = {
+    pvar_drvet_adcPi,
+    pvar_drvet_drvAsyn,
+    pvar_drvet_stream};
+
+typedef void (*reg_func)(void);
+epicsShareExtern reg_func pvar_func_adcPiRegister,
+    pvar_func_arrInitialize, pvar_func_arrayTestRegister, pvar_func_asSub,
+    pvar_func_asynInterposeEosRegister,
+    pvar_func_asynInterposeFlushRegister, pvar_func_asynRegister,
+    pvar_func_dbndInitialize, pvar_func_drvAsynIPPortRegisterCommands,
+    pvar_func_drvAsynIPServerPortRegisterCommands,
+    pvar_func_editSseqRegistrar, pvar_func_interpRegister,
+    pvar_func_streamRegistrar, pvar_func_subAveRegister,
+    pvar_func_syncInitialize, pvar_func_tsInitialize,
+    pvar_func_register_func_aSubReadDHTInit,
+    pvar_func_register_func_aSubReadDHTProcess;
+
+epicsShareExtern int * const pvar_int_aCalcAsyncThreshold;
+epicsShareExtern int * const pvar_int_aCalcLoopMax;
+epicsShareExtern int * const pvar_int_aCalcPerformDebug;
+epicsShareExtern int * const pvar_int_aCalcPostfixDebug;
+epicsShareExtern int * const pvar_int_aCalcoutRecordDebug;
+epicsShareExtern int * const pvar_int_aSubReadDHTDebug;
+epicsShareExtern int * const pvar_int_adcPiDebug;
+epicsShareExtern int * const pvar_int_arrayTestDebug;
+epicsShareExtern int * const pvar_int_asCaDebug;
+epicsShareExtern int * const pvar_int_atExitDebug;
+epicsShareExtern double * const pvar_double_boHIGHlimit;
+epicsShareExtern int * const pvar_int_boHIGHprecision;
+epicsShareExtern double * const pvar_double_calcoutODLYlimit;
+epicsShareExtern int * const pvar_int_calcoutODLYprecision;
+epicsShareExtern int * const pvar_int_callbackParallelThreadsDefault;
+epicsShareExtern int * const pvar_int_dbBptNotMonotonic;
+epicsShareExtern int * const pvar_int_dbRecordsOnceOnly;
+epicsShareExtern int * const pvar_int_dbTemplateMaxVars;
+epicsShareExtern int * const pvar_int_debugSubAve;
+epicsShareExtern int * const pvar_int_devaCalcoutSoftDebug;
+epicsShareExtern int * const pvar_int_devsCalcoutSoftDebug;
+epicsShareExtern int * const pvar_int_histogramSDELprecision;
+epicsShareExtern int * const pvar_int_interpDebug;
+epicsShareExtern int * const pvar_int_sCalcLoopMax;
+epicsShareExtern int * const pvar_int_sCalcPerformDebug;
+epicsShareExtern int * const pvar_int_sCalcPostfixDebug;
+epicsShareExtern int * const pvar_int_sCalcStackHW;
+epicsShareExtern int * const pvar_int_sCalcStackLW;
+epicsShareExtern int * const pvar_int_sCalcoutRecordDebug;
+epicsShareExtern double * const pvar_double_seqDLYlimit;
+epicsShareExtern int * const pvar_int_seqDLYprecision;
+epicsShareExtern int * const pvar_int_sseqRecDebug;
+epicsShareExtern int * const pvar_int_streamDebug;
+epicsShareExtern int * const pvar_int_swaitRecordDebug;
+epicsShareExtern int * const pvar_int_transformRecordDebug;
+
+static struct iocshVarDef vardefs[] = {
+    {"aCalcAsyncThreshold", iocshArgInt, pvar_int_aCalcAsyncThreshold},
+    {"aCalcLoopMax", iocshArgInt, pvar_int_aCalcLoopMax},
+    {"aCalcPerformDebug", iocshArgInt, pvar_int_aCalcPerformDebug},
+    {"aCalcPostfixDebug", iocshArgInt, pvar_int_aCalcPostfixDebug},
+    {"aCalcoutRecordDebug", iocshArgInt, pvar_int_aCalcoutRecordDebug},
+    {"aSubReadDHTDebug", iocshArgInt, pvar_int_aSubReadDHTDebug},
+    {"adcPiDebug", iocshArgInt, pvar_int_adcPiDebug},
+    {"arrayTestDebug", iocshArgInt, pvar_int_arrayTestDebug},
+    {"asCaDebug", iocshArgInt, pvar_int_asCaDebug},
+    {"atExitDebug", iocshArgInt, pvar_int_atExitDebug},
+    {"boHIGHlimit", iocshArgDouble, pvar_double_boHIGHlimit},
+    {"boHIGHprecision", iocshArgInt, pvar_int_boHIGHprecision},
+    {"calcoutODLYlimit", iocshArgDouble, pvar_double_calcoutODLYlimit},
+    {"calcoutODLYprecision", iocshArgInt, pvar_int_calcoutODLYprecision},
+    {"callbackParallelThreadsDefault", iocshArgInt, pvar_int_callbackParallelThreadsDefault},
+    {"dbBptNotMonotonic", iocshArgInt, pvar_int_dbBptNotMonotonic},
+    {"dbRecordsOnceOnly", iocshArgInt, pvar_int_dbRecordsOnceOnly},
+    {"dbTemplateMaxVars", iocshArgInt, pvar_int_dbTemplateMaxVars},
+    {"debugSubAve", iocshArgInt, pvar_int_debugSubAve},
+    {"devaCalcoutSoftDebug", iocshArgInt, pvar_int_devaCalcoutSoftDebug},
+    {"devsCalcoutSoftDebug", iocshArgInt, pvar_int_devsCalcoutSoftDebug},
+    {"histogramSDELprecision", iocshArgInt, pvar_int_histogramSDELprecision},
+    {"interpDebug", iocshArgInt, pvar_int_interpDebug},
+    {"sCalcLoopMax", iocshArgInt, pvar_int_sCalcLoopMax},
+    {"sCalcPerformDebug", iocshArgInt, pvar_int_sCalcPerformDebug},
+    {"sCalcPostfixDebug", iocshArgInt, pvar_int_sCalcPostfixDebug},
+    {"sCalcStackHW", iocshArgInt, pvar_int_sCalcStackHW},
+    {"sCalcStackLW", iocshArgInt, pvar_int_sCalcStackLW},
+    {"sCalcoutRecordDebug", iocshArgInt, pvar_int_sCalcoutRecordDebug},
+    {"seqDLYlimit", iocshArgDouble, pvar_double_seqDLYlimit},
+    {"seqDLYprecision", iocshArgInt, pvar_int_seqDLYprecision},
+    {"sseqRecDebug", iocshArgInt, pvar_int_sseqRecDebug},
+    {"streamDebug", iocshArgInt, pvar_int_streamDebug},
+    {"swaitRecordDebug", iocshArgInt, pvar_int_swaitRecordDebug},
+    {"transformRecordDebug", iocshArgInt, pvar_int_transformRecordDebug},
+    {NULL, iocshArgInt, NULL}
+};
+
+int kstm_registerRecordDeviceDriver(DBBASE *pbase)
+{
+    static int executed = 0;
+    const char *bldTop = "/home/epics/vierkstm";
+    const char *envTop = getenv("TOP");
+
+    if (envTop && strcmp(envTop, bldTop)) {
+        printf("Warning: IOC is booting with TOP = \"%s\"\n"
+               "          but was built with TOP = \"%s\"\n",
+               envTop, bldTop);
+    }
+
+    if (!pbase) {
+        printf("pdbbase is NULL; you must load a DBD file first.\n");
+        return -1;
+    }
+
+    if (executed) {
+        printf("Warning: Registration already done.\n");
+    }
+    executed = 1;
+
+    registerRecordTypes(pbase, NELEMENTS(rtl), recordTypeNames, rtl);
+    registerDevices(pbase, NELEMENTS(devsl), deviceSupportNames, devsl);
+    registerDrivers(pbase, NELEMENTS(drvsl), driverSupportNames, drvsl);
+    pvar_func_adcPiRegister();
+    pvar_func_arrInitialize();
+    pvar_func_arrayTestRegister();
+    pvar_func_asSub();
+    pvar_func_asynInterposeEosRegister();
+    pvar_func_asynInterposeFlushRegister();
+    pvar_func_asynRegister();
+    pvar_func_dbndInitialize();
+    pvar_func_drvAsynIPPortRegisterCommands();
+    pvar_func_drvAsynIPServerPortRegisterCommands();
+    pvar_func_editSseqRegistrar();
+    pvar_func_interpRegister();
+    pvar_func_streamRegistrar();
+    pvar_func_subAveRegister();
+    pvar_func_syncInitialize();
+    pvar_func_tsInitialize();
+    pvar_func_register_func_aSubReadDHTInit();
+    pvar_func_register_func_aSubReadDHTProcess();
+    iocshRegisterVariable(vardefs);
+    return 0;
+}
+
+/* kstm_registerRecordDeviceDriver */
+static const iocshArg rrddArg0 = {"pdbbase", iocshArgPdbbase};
+static const iocshArg *rrddArgs[] = {&rrddArg0};
+static const iocshFuncDef rrddFuncDef =
+    {"kstm_registerRecordDeviceDriver", 1, rrddArgs};
+static void rrddCallFunc(const iocshArgBuf *)
+{
+    kstm_registerRecordDeviceDriver(*iocshPpdbbase);
+}
+
+} // extern "C"
+
+/*
+ * Register commands on application startup
+ */
+static int Registration() {
+    iocshRegisterCommon();
+    iocshRegister(&rrddFuncDef, rrddCallFunc);
+    return 0;
+}
+
+static int done = Registration();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/kstm_registerRecordDeviceDriver.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,21 @@
+kstm_registerRecordDeviceDriver.o: kstm_registerRecordDeviceDriver.cpp \
+ /home/epics//EPICS/base/include/epicsStdlib.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/os/Linux/osdStrtod.h \
+ /home/epics//EPICS/base/include/epicsTypes.h \
+ /home/epics//EPICS/base/include/compilerDependencies.h \
+ /home/epics//EPICS/base/include/compiler/gcc/compilerSpecific.h \
+ /home/epics//EPICS/base/include/errMdef.h \
+ /home/epics//EPICS/base/include/iocsh.h \
+ /home/epics//EPICS/base/include/iocshRegisterCommon.h \
+ /home/epics//EPICS/base/include/registryCommon.h \
+ /home/epics//EPICS/base/include/dbStaticLib.h \
+ /home/epics//EPICS/base/include/dbFldTypes.h \
+ /home/epics//EPICS/base/include/dbBase.h \
+ /home/epics//EPICS/base/include/ellLib.h \
+ /home/epics//EPICS/base/include/dbDefs.h \
+ /home/epics//EPICS/base/include/link.h \
+ /home/epics//EPICS/base/include/cantProceed.h \
+ /home/epics//EPICS/base/include/devSup.h \
+ /home/epics//EPICS/base/include/registryRecordType.h \
+ /home/epics//EPICS/base/include/recSup.h
Binary file kstmApp/src/O.linux-arm/kstm_registerRecordDeviceDriver.o has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/pi_2_dht_read.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,11 @@
+pi_2_dht_read.o: ../pi_2_dht_read.c \
+ /home/epics//EPICS/base/include/epicsExit.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/epicsThread.h \
+ /home/epics//EPICS/base/include/shareLib.h \
+ /home/epics//EPICS/base/include/os/Linux/osdThread.h \
+ /home/epics//EPICS/base/include/ellLib.h \
+ /home/epics//EPICS/base/include/epicsEvent.h \
+ /home/epics//EPICS/base/include/os/Linux/osdEvent.h \
+ /home/epics//EPICS/base/include/iocsh.h ../pi_2_dht_read.h \
+ ../common_dht_read.h ../pi_2_mmio.h
Binary file kstmApp/src/O.linux-arm/pi_2_dht_read.o has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.linux-arm/pi_2_mmio.d	Mon Jul 09 13:36:24 2018 +0200
@@ -0,0 +1,1 @@
+pi_2_mmio.o: ../pi_2_mmio.c ../pi_2_mmio.h
Binary file kstmApp/src/O.linux-arm/pi_2_mmio.o has changed