add PVs for PhotonSTM
authorHeinz Junkes <junkes@fhi-berlin.mpg.de>
Mon, 27 Jun 2016 18:08:05 +0200
changeset 3 ec018606c207
parent 2 3b3af1ff2783
child 4 f7598b2df637
add PVs for PhotonSTM
iocBoot/iockstm/pid.txt
iocBoot/iockstm/st.cmd
kstmApp/Db/2Kstm.db
kstmApp/Db/Makefile
kstmApp/Db/O.linux-arm/Makefile
kstmApp/Db/PhotonSTM.db
kstmApp/Db/adcPi.db
kstmApp/Db/dht.db
kstmApp/src/O.Common/kstm.dbd
kstmApp/src/drvAsynI2C.cpp
kstmApp/src/drvAsynI2C.dbd
kstmApp/src/drvAsynI2C.h
--- a/iocBoot/iockstm/pid.txt	Tue Jan 19 10:54:27 2016 +0100
+++ b/iocBoot/iockstm/pid.txt	Mon Jun 27 18:08:05 2016 +0200
@@ -1,1 +1,1 @@
-2436
+2773
--- a/iocBoot/iockstm/st.cmd	Tue Jan 19 10:54:27 2016 +0100
+++ b/iocBoot/iockstm/st.cmd	Mon Jun 27 18:08:05 2016 +0200
@@ -49,6 +49,8 @@
 #define ASYN_TRACEIO_ESCAPE 0x0002
 #define ASYN_TRACEIO_HEX 0x0004
 #asynSetTraceIOMask ${PGC2_MC_LINK} 0 1
+#asynSetTraceIOMask ${PGC2_PC_LINK} 0 1
+#asynSetTraceIOMask ${M1900_LINK} 0 1
 
 # Set asyn trace masks
 # ASYN_TRACE_ERROR    0x0001
@@ -57,8 +59,10 @@
 # ASYN_TRACEIO_DRIVER 0x0008
 # ASYN_TRACE_FLOW     0x0010
 #asynSetTraceMask ${PGC2_MC_LINK} 0 8
+#asynSetTraceMask ${PGC2_PC_LINK} 0 8
+#asynSetTraceMask ${M1900_LINK} 0 8
 
-#epicsEnvSet ("streamDebug","1")
+epicsEnvSet ("streamDebug","1")
 
 ## Load record instances
 dbLoadRecords("db/misc.db","P=FHI4KSTM, Q=MISC")
@@ -73,7 +77,7 @@
 dbLoadRecords("db/pgc2.db","PORT=PGC2_PC, P=FHI4KSTM, Q=PGC2_PC")
 
 #dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_0,C=0")
-#dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_1,C=1")
+dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_1,C=1")
 dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_2,C=2")
 dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_3,C=3")
 #dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_4,C=4")
@@ -81,6 +85,12 @@
 #dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_6,C=6")
 #dbLoadRecords("db/adcPi.db","P=FHI4KSTM:ADCPI:CH_7,C=7")
 
+#2K translation PVs
+dbLoadRecords("db/2Kstm.db");
+dbLoadRecords("db/PhotonSTM.db");
+
+
+var aSubReadDHTDebug 1
 iocInit()
 
 ## Start any sequence programs
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/Db/2Kstm.db	Mon Jun 27 18:08:05 2016 +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")
+}
--- a/kstmApp/Db/Makefile	Tue Jan 19 10:54:27 2016 +0100
+++ b/kstmApp/Db/Makefile	Mon Jun 27 18:08:05 2016 +0200
@@ -29,6 +29,10 @@
 
 DB += adcPi.db
 
+DB += 2Kstm.db
+
+DB += PhotonSTM.db
+
 #----------------------------------------------------
 # 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/O.linux-arm/Makefile	Mon Jun 27 18:08:05 2016 +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/Db/PhotonSTM.db	Mon Jun 27 18:08:05 2016 +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")
+}
--- a/kstmApp/Db/adcPi.db	Tue Jan 19 10:54:27 2016 +0100
+++ b/kstmApp/Db/adcPi.db	Mon Jun 27 18:08:05 2016 +0200
@@ -1,6 +1,6 @@
 record(ai,"$(P)"){
   field(DTYP,"adcPi")
-  field(DESC,"ADC Pi")
+  field(DESC,"ADC Pi Channel $(C)")
   field(SCAN,"$(SCAN=1 second)")
   field(INP,"#C1 S$(C) @dumm")
   field(LINR,"LINEAR")
--- a/kstmApp/Db/dht.db	Tue Jan 19 10:54:27 2016 +0100
+++ b/kstmApp/Db/dht.db	Mon Jun 27 18:08:05 2016 +0200
@@ -1,3 +1,17 @@
+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")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/O.Common/kstm.dbd	Mon Jun 27 18:08:05 2016 +0200
@@ -0,0 +1,16685 @@
+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(calcoutDOPT) {
+    choice(calcoutDOPT_Use_VAL, "Use CALC")
+    choice(calcoutDOPT_Use_OVAL, "Use OCAL")
+}
+menu(menuOmsl) {
+    choice(menuOmslsupervisory, "supervisory")
+    choice(menuOmslclosed_loop, "closed_loop")
+}
+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(stringinPOST) {
+    choice(stringinPOST_OnChange, "On Change")
+    choice(stringinPOST_Always, "Always")
+}
+menu(menuPini) {
+    choice(menuPiniNO, "NO")
+    choice(menuPiniYES, "YES")
+    choice(menuPiniRUN, "RUN")
+    choice(menuPiniRUNNING, "RUNNING")
+    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")
+    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(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(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")
+    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(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")
+    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(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(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(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(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(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(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(serialIX) {
+    choice(serialIX_unknown, "Unknown")
+    choice(serialIX_No, "No")
+    choice(serialIX_Yes, "Yes")
+}
+menu(menuYesNo) {
+    choice(menuYesNoNO, "NO")
+    choice(menuYesNoYES, "YES")
+}
+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")
+}
+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(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(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(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(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(adcPiRegister)
+registrar(drvAsynIPPortRegisterCommands)
+registrar(tsInitialize)
+registrar(arrInitialize)
+registrar(streamRegistrar)
+registrar(syncInitialize)
+registrar(dbndInitialize)
+registrar(asynRegister)
+registrar(drvAsynIPServerPortRegisterCommands)
+registrar(asSub)
+registrar(asynInterposeFlushRegister)
+registrar(asynInterposeEosRegister)
+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(dbBptNotMonotonic, int)
+variable(boHIGHlimit, double)
+variable(atExitDebug, int)
+variable(seqDLYprecision, int)
+variable(boHIGHprecision, int)
+variable(seqDLYlimit, double)
+variable(aSubReadDHTDebug, int)
+variable(calcoutODLYprecision, int)
+variable(histogramSDELprecision, int)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/drvAsynI2C.cpp	Mon Jun 27 18:08:05 2016 +0200
@@ -0,0 +1,427 @@
+//******************************************************************************
+// Copyright (C) 2015 Florian Feldbauer <florian@ep1.ruhr-uni-bochum.de>
+//                    - University Mainz, Institute foer nuc
+//
+// This file is part of drvAsynCan
+//
+// drvAsynCan is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// drvAsynCan is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// brief   AsynPortDriver for PANDA Raspberry Pi CAN interface
+//
+// version 3.0.0; Jul. 29, 2014
+//******************************************************************************
+
+//_____ I N C L U D E S _______________________________________________________
+
+// ANSI C includes
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <cerrno>
+#include <fcntl.h>
+#include <linux/i2c-dev.h>
+//#include <linux/i2c.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+//#include <sys/select.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
+// EPICS includes
+#include <epicsEvent.h>
+#include <epicsExport.h>
+#include <epicsMutex.h>
+#include <epicsString.h>
+#include <epicsThread.h>
+#include <epicsTime.h>
+#include <epicsTimer.h>
+#include <epicsTypes.h>
+#include <iocsh.h>
+
+// local includes
+#include "drvAsynI2C.h"
+
+//_____ D E F I N I T I O N S __________________________________________________
+
+//_____ G L O B A L S __________________________________________________________
+
+//_____ L O C A L S ____________________________________________________________
+static epicsTimerId       i2c_timer;
+static epicsTimerQueueId  i2c_timerQueue;
+
+//_____ F U N C T I O N S ______________________________________________________
+
+//------------------------------------------------------------------------------
+//! @brief       Timeout handler for I2C communication 
+//------------------------------------------------------------------------------
+static void timeoutHandler( void *ptr ) {
+  drvAsynI2C *pi2c = static_cast<drvAsynI2C*>( ptr );
+  pi2c->timeout();
+}
+
+//------------------------------------------------------------------------------
+//! @brief       Called when asyn clients call pasynOctet->read().
+//! @param [in]  pasynUser  pasynUser structure that encodes the reason and address.
+//! @param [out] value      Address of the string to read.
+//! @param [in]  maxChars   Maximum number of characters to read.
+//! @param [out] nActual    Number of characters actually read.
+//! @param [out] eomReason  Reason that read terminated.
+//! @return      in case of no error occured asynSuccess is returned. Otherwise
+//!              asynError or asynTimeout is returned. A error message is stored
+//!              in pasynUser->errorMessage.
+//! @sa          writeOctet
+//!
+//! Read a byte stream from the I2C bus.
+//! To set the correct slave address the pasynOctet->write() call has to be used.
+//! If the slave has multiple registers, use the write call to setup slave
+//! address and register address, followed by this read call.
+///------------------------------------------------------------------------------
+asynStatus drvAsynI2C::readOctet( asynUser *pasynUser, char *value, size_t maxChars,
+                                  size_t *nActual, int *eomReason ) {
+  if( _fd < 0 ) {
+    epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize,
+                   "%s: %s disconnected:", portName, _deviceName );
+    return asynError;
+  }
+  if( maxChars <= 0 ) {
+    epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize,
+                   "%s: %s maxchars %d Why <=0?", portName, _deviceName, (int)maxChars );
+    return asynError;
+  }
+
+  int thisRead = 0;
+  int nRead = 0;
+  bool timerStarted = false;
+  asynStatus status = asynSuccess;
+
+  _timeout = false;
+
+  if( eomReason ) *eomReason = 0;
+
+  for(;;) {
+    if( !timerStarted && pasynUser->timeout > 0 ) {
+      epicsTimerStartDelay( i2c_timer, pasynUser->timeout );
+      timerStarted = true;
+    }
+    thisRead = read( _fd, value, maxChars );
+    if( thisRead > 0 ) {
+      nRead = thisRead;
+      break;
+    } else {
+      if( thisRead < 0 && ( errno != EWOULDBLOCK )
+                       && ( errno != EINTR )
+                       && ( errno != EAGAIN ) ) {
+        epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize,
+                       "%s: %s read error: %s",
+                       portName, _deviceName, strerror( errno ) );
+        status = asynError;
+        break;
+      }
+    }
+    if( _timeout ) break;
+  }
+  if( timerStarted ) epicsTimerCancel( i2c_timer );
+  if( _timeout && asynSuccess == status ) status = asynTimeout;
+
+/*
+  int mytimeout = (int)( pasynUser->timeout * 1.e6 );
+  if ( 0 > mytimeout ) {
+
+    nbytes = read( _fd, value, maxChars );
+    if ( 0 > nbytes ) {
+      epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize, 
+                     "Error receiving message from device '%s': %d %s", 
+                     _deviceName, errno, strerror( errno ) );
+      return asynError;
+    }
+
+  } else {
+
+    fd_set fdRead;
+    struct timeval t;
+    
+    // calculate timeout values
+    t.tv_sec  = mytimeout / 1000000L;
+    t.tv_usec = mytimeout % 1000000L;
+    
+    FD_ZERO( &fdRead );
+    FD_SET( _fd, &fdRead );
+    
+    // wait until timeout or a message is ready to get read
+    int err = select( _fd + 1, &fdRead, NULL, NULL, &t );
+    
+    // the only one file descriptor is ready for read
+    if ( 0 < err ) {
+      nbytes = read( _fd, value, maxChars );
+      if ( 0 > nbytes ) {
+        epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize, 
+                       "Error receiving message from device '%s': %d %s", 
+                       _deviceName, errno, strerror( errno ) );
+        return asynError;
+      }
+    }
+    
+    // nothing is ready, timeout occured
+    if ( 0 == err ) return asynTimeout;
+    if ( 0 > err )  {
+      epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize, 
+                     "Error receiving message from device '%s': %d %s", 
+                     _deviceName, errno, strerror( errno ) );
+      return asynError;
+    }
+  }
+*/
+
+  *nActual = nRead;
+  if( eomReason && *nActual >= maxChars ) {
+    *eomReason = ASYN_EOM_CNT;
+  }
+
+  asynPrint( pasynUser, ASYN_TRACEIO_DRIVER, 
+             "%s: read %lu bytes from %s, return %s\n",
+             portName, (unsigned long)*nActual, _deviceName,
+             pasynManager->strStatus( status ) );
+  
+  return status; 
+}
+
+//------------------------------------------------------------------------------
+//! @brief       Called when asyn clients call pasynOctet->write().
+//! @param [in]  pasynUser  pasynUser structure that encodes the reason and address.
+//! @param [in]  value      Address of the string to write.
+//! @param [in]  nChars     Number of characters to write.
+//! @param [out] nActual    Number of characters actually written.
+//! @return      in case of no error occured asynSuccess is returned. Otherwise
+//!              asynError or asynTimeout is returned. A error message is stored
+//!              in pasynUser->errorMessage.
+//!
+//! Write a byte stream to the i2c bus. First byte holds the slave address, followed
+//! by the acutal data to send.
+//! Example: Setting the configuration register of the AD7998 to convert all
+//! 8 channels and use the BUSY output:
+//! value = 0x20 0x02 0x0ffa
+//! Depending on the slave device, multiple write commands can be concatenated
+///------------------------------------------------------------------------------
+asynStatus drvAsynI2C::writeOctet( asynUser *pasynUser, char const *value, size_t maxChars,
+                                   size_t *nActual ){
+
+  int thisWrite = 0;
+  bool timerStarted = false;
+  asynStatus status = asynSuccess;
+
+  if( _fd < 0 ) {
+    epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize,
+                   "%s: %s disconnected:", portName, _deviceName );
+    return asynError;
+  }
+  asynPrint( pasynUser, ASYN_TRACEIO_DRIVER, 
+             "drvAsynI2C::writeOctet: trying to send %u bytes\n",
+             maxChars );
+
+  if( 0 == maxChars ) {
+    *nActual = 0;
+    return asynSuccess;
+  }
+
+  _timeout = false;
+
+  printf( "drvAsynI2C::writeOctet: sending: ");
+  for( size_t viech = 0; viech < maxChars; ++viech ) {
+    printf( "0x%02x", value[viech] );
+  }
+  printf( "\n" );
+
+  int addr = value[0];
+  if( addr != _slaveAddress ) {
+    // set slave address
+   if( ioctl( _fd, I2C_SLAVE, addr ) < 0 ) {
+     epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize,
+                    "%s: %s Can't set slave address: %s",
+                    portName, _deviceName, strerror( errno ) );
+     return asynError;
+
+    _slaveAddress = addr;
+   }
+  }
+  ++value;
+  int nleft = maxChars - 1;
+  if( 0 < nleft ) {
+
+    if( pasynUser->timeout > 0 ) {
+      epicsTimerStartDelay( i2c_timer, pasynUser->timeout );
+      timerStarted = true;
+    }
+
+    for(;;) {
+      thisWrite = write( _fd, value, nleft );
+      if ( 0 < thisWrite ) {
+        nleft -= thisWrite;
+        if( 0 == nleft ) break;
+        value += thisWrite;
+      }
+      if( _timeout || 0 == pasynUser->timeout ) {
+        status = asynTimeout;
+        break;
+      }
+      if( 0 > thisWrite && ( errno != EWOULDBLOCK )
+                        && ( errno != EINTR )
+                        && ( errno != EAGAIN ) ) {
+        epicsSnprintf( pasynUser->errorMessage, pasynUser->errorMessageSize,
+                       "%s: %s write error: %s",
+                       portName, _deviceName, strerror( errno ) );
+        status = asynError;
+        break;
+      }
+    }
+    if( timerStarted ) epicsTimerCancel( i2c_timer );
+
+  }
+
+  *nActual = maxChars - nleft;
+
+  asynPrint( pasynUser, ASYN_TRACEIO_DRIVER, 
+             "%s: wrote %lu bytes to %s, return %s\n",
+             portName, (unsigned long)*nActual, _deviceName,
+             pasynManager->strStatus( status ) );
+  
+  return status; 
+}
+
+//------------------------------------------------------------------------------
+//! @brief       Connect driver to device
+//! @param [in]  pasynUser  pasynUser structure that encodes the reason and address.
+//! @return      in case of no error occured asynSuccess is returned. Otherwise
+//!              asynError or asynTimeout is returned. A error message is stored
+//!              in pasynUser->errorMessage.
+///------------------------------------------------------------------------------
+asynStatus drvAsynI2C::connect( asynUser *pasynUser ) {
+  if( _fd >= 0 ) {
+    epicsSnprintf( pasynUser->errorMessage,pasynUser->errorMessageSize,
+                   "%s: Link to %s already open!", portName, _deviceName );
+    return asynError;
+  }
+  asynPrint( pasynUser, ASYN_TRACEIO_DRIVER,
+             "%s: Open connection to %s\n", portName, _deviceName );
+
+  if( ( _fd = open( _deviceName, O_RDWR ) ) < 0 ) {
+    epicsSnprintf( pasynUser->errorMessage,pasynUser->errorMessageSize,
+                   "%s: Can't open %s: %s", portName, _deviceName, strerror( errno ) );
+    return asynError;
+  }
+  if( ioctl( _fd, I2C_FUNCS, &_i2cfuncs ) < 0 ) {
+    epicsSnprintf( pasynUser->errorMessage,pasynUser->errorMessageSize,
+                   "%s: Can't get functionality of %s: %s", portName, _deviceName, strerror( errno ) );
+    return asynError;
+  }
+  pasynManager->exceptionConnect( pasynUser );
+  return asynSuccess;
+}
+
+//------------------------------------------------------------------------------
+//! @brief       Disconnect driver from device
+//! @param [in]  pasynUser  pasynUser structure that encodes the reason and address.
+//! @return      in case of no error occured asynSuccess is returned. Otherwise
+//!              asynError or asynTimeout is returned. A error message is stored
+//!              in pasynUser->errorMessage.
+///------------------------------------------------------------------------------
+asynStatus drvAsynI2C::disconnect( asynUser *pasynUser ) {
+  asynPrint( pasynUser, ASYN_TRACEIO_DRIVER,
+             "%s: disconnect %s\n", portName, _deviceName );
+  epicsTimerCancel( i2c_timer );
+  if( _fd >= 0 ) {
+    close( _fd );
+    _fd = -1;
+    pasynManager->exceptionDisconnect(pasynUser);
+  } 
+  return asynSuccess;
+}
+
+//------------------------------------------------------------------------------
+//! @brief       Standard C'tor.
+//! @param [in]  portName The name of the asynPortDriver to be created.
+//! @param [in]  ttyName  The name of the device
+//------------------------------------------------------------------------------
+drvAsynI2C::drvAsynI2C( const char *portName, const char *ttyName ) 
+  : asynPortDriver( portName,
+                    0, // maxAddr
+                    0, // paramTableSize
+                    asynCommonMask | asynOctetMask | asynDrvUserMask, // Interface mask
+                    asynCommonMask | asynOctetMask,  // Interrupt mask
+                    ASYN_CANBLOCK, // asynFlags
+                    1,  // Autoconnect
+                    0,  // Default priority
+                    0 ) // Default stack size
+{
+  _deviceName = epicsStrDup( ttyName );
+  _fd = -1;
+  _slaveAddress = 0;
+//  if( ( _fd = open( _deviceName, O_RDWR ) ) < 0 ) {
+//    std::cerr << "Cannot open port" << std::endl;
+//    return;
+//  }
+//  if( ioctl( _fd, I2C_FUNCS, &_i2cfuncs ) < 0 ) {
+//    std::cerr << "Cannont get I2C_FUNCS" << std::endl;
+//    return;
+//  }
+}
+
+// Configuration routines.  Called directly, or from the iocsh function below 
+extern "C" {
+  //----------------------------------------------------------------------------
+  //! @brief       EPICS iocsh callable function to call constructor
+  //!              for the drvAsynI2C class.
+  //! @param [in]  portName The name of the asyn port driver to be created.
+  //! @param [in]  ttyName  The name of the interface 
+  //----------------------------------------------------------------------------
+  int drvAsynI2CConfigure( const char *portName, const char *ttyName ) {
+    if( !portName ) {
+      printf( "Port name missing.\n" );
+      return -1;
+    }
+    if( !ttyName ) {
+      printf( "TTY name missing.\n" );
+      return -1;
+    }
+    drvAsynI2C* pi2c = new drvAsynI2C( portName, ttyName );
+    i2c_timerQueue = epicsTimerQueueAllocate( 1, epicsThreadPriorityScanLow );
+    i2c_timer = epicsTimerQueueCreateTimer( i2c_timerQueue, timeoutHandler, pi2c );
+    if( !i2c_timer ) {
+      printf( "drvAsynI2C: Can't create timer.\n");
+      return -1;
+    }
+    return( asynSuccess );
+  }
+  static const iocshArg initI2CArg0 = { "portName", iocshArgString };
+  static const iocshArg initI2CArg1 = { "ttyName",  iocshArgString };
+  static const iocshArg * const initI2CArgs[] = { &initI2CArg0, &initI2CArg1 };
+  static const iocshFuncDef initI2CFuncDef = { "drvAsynI2CConfigure", 2, initI2CArgs };
+  static void initI2CCallFunc( const iocshArgBuf *args ) {
+    drvAsynI2CConfigure( args[0].sval, args[1].sval );
+  }
+
+  //----------------------------------------------------------------------------
+  //! @brief   Register functions to EPICS
+  //----------------------------------------------------------------------------
+  void drvAsynI2CRegister( void ) {
+    static int firstTime = 1;
+    if ( firstTime ) {
+      iocshRegister( &initI2CFuncDef, initI2CCallFunc );
+      firstTime = 0;
+    }
+  }
+  
+  epicsExportRegistrar( drvAsynI2CRegister );
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/drvAsynI2C.dbd	Mon Jun 27 18:08:05 2016 +0200
@@ -0,0 +1,1 @@
+registrar(drvAsynI2CRegister)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kstmApp/src/drvAsynI2C.h	Mon Jun 27 18:08:05 2016 +0200
@@ -0,0 +1,73 @@
+//******************************************************************************
+// Copyright (C) 2015 Florian Feldbauer <florian@ep1.ruhr-uni-bochum.de>
+//                    - University Mainz, Institute for nucular physics
+//
+// This file is part of drvAsynI2C
+//
+// drvAsynI2C is free software; you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation; either version 3 of the License, or
+// (at your option) any later version.
+//
+// drvAsynI2C is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+//
+// version 1.0.0; Nov. 17, 2015
+//******************************************************************************
+
+#ifndef __ASYN_I2C_H__
+#define __ASYN_I2C_H__
+
+//_____ I N C L U D E S _______________________________________________________
+
+// ANSI C includes
+
+// EPICS includes
+//#include <epicsTimer.h>
+
+// local includes
+#include "asynPortDriver.h"
+
+//_____ D E F I N I T I O N S __________________________________________________
+
+//! @brief   asynPortDriver for I2C
+//!
+class drvAsynI2C : public asynPortDriver {
+ public:
+  drvAsynI2C( const char *portName, const char *ttyName );
+
+  // These are the methods that we override from asynPortDriver
+  virtual asynStatus readOctet( asynUser *pasynUser, char *value, size_t maxChars,
+                                size_t *nActual, int *eomReason );
+  virtual asynStatus writeOctet( asynUser *pasynUser, char const *value, size_t maxChars,
+                                 size_t *nActual );
+//  virtual asynStatus readOption( asynUser *pasynUser, char const *key, char *value, int maxChars );
+//  virtual asynStatus writeOption( asynUser *pasynUser, char const *key, char const *value );
+
+  virtual asynStatus connect( asynUser *pasynUser );
+  virtual asynStatus disconnect( asynUser *pasynUser );
+
+  inline void timeout() { _timeout = true; }
+
+ private:
+
+  // Our data
+  char* _deviceName;
+  int   _fd;
+  bool  _timeout;
+  unsigned long  _i2cfuncs;
+  int   _slaveAddress;
+//  epicsTimerId       _timer;
+//  epicsTimerQueueId  _timerQueue;
+    
+};
+
+
+#endif
+