Here's an example of how to add caputRecorder to an existing application setenv TOP /net/s100dserv/xorApps/epics/synApps_5_7/ioc/mlab setenv CAPUTRECORDER /APSshare/epics/synApps_5_7/support/caputRecorder-1-0 cd $TOP ed configure/RELEASE add CAPUTRECORDER=$(SUPPORT)/caputRecorder-1-0 cd mlabApp/src ed Makefile add something analogous to this: ifdef CAPUTRECORDER mlab_Common_DBD += caputRecorder.dbd mlab_Common_LIBS += caputRecorder endif cd $TOP make rebuild cd $TOP/iocBoot ed accessSecurity.acf & make it look like this: HAG(workstation) {} UAG(user) {} ASG(DEFAULT) { RULE(1,READ) RULE(1,WRITE,TRAPWRITE) { HAG(workstation) UAG(user) } RULE(1,WRITE) } or, for very simple cases, like this: ASG(DEFAULT) { RULE(1,WRITE,TRAPWRITE) } cd $TOP/iocBoot/iocmlab ed st.cmd& add this: # Access Security # Note: for vxWorks, you must execute this in iocsh, because asSetFilename # doesn't expand macros. # Also note: if you screw up this file name, VERY strange things will happen, # accompanied by scary error messages like this: # A call to 'assert(status == epicsMutexLockOK)' # by thread xyzzy failed # Calling epicsThreadSuspendSelf() iocsh asSetFilename("$(TOP)/iocBoot/accessSecurity.acf") exit # caputRecorder dbLoadRecords("$(CAPUTRECORDER)/caputRecorderApp/Db/caputPoster.db","P=mlab:,N=300") # if this IOC will host caputRecorder's user interface dbLoadRecords("$(CAPUTRECORDER)/caputRecorderApp/Db/caputRecorder.db","P=mlab:,N=100") ... iocInit ... registerCaputRecorderTrapListener("mlab:caputRecorderCommand") ed save_restore.cmd add this: set_requestfile_path("$(CAPUTRECORDER)", "caputRecorderApp/Db") ed auto_settings.req: add this: file caputRecorder_settings.req P=mlab:,N=300 ############################################## # if the application will run caputRecorder.py ############################################## If deploying for an ioc using synApps earlier than 5.8, copy the 5.8 version of release.pl to $TOP cd $TOP cp $CAPUTRECORDER/example_start_putrecorder start_putrecorder edit start_putrecorder, fixing the following lines: EPICS_APP=/net/s100dserv/xorApps/epics/synApps_5_7/ioc/mlab MACROS_PY_DIR=${EPICS_APP}/mlabApp/op/python edit start_epics to set the following environment variables: START_PUTRECORDER = path to start_putrecorder EDITOR = your preferred text editor for python files edit start_epics, or setup_epics_common, to modify the EPICS_DISPLAY_PATH setenv myEPICS_DISPLAY_PATH $myEPICS_DISPLAY_PATH':'$CAPUTRECORDER/caputRecorderApp/op/adl mkdir mlabApp/op/python cd $TOP/mlabApp/op/python # note that"mlab" in the following is the ioc's prefix, less any trailing ":" cp $CAPUTRECORDER/caputRecorderApp/op/python/example_macros.py macros_mlab.py chmod a+w macros_mlab.py edit macros_mlab.py delete everything but the _abort function, and the blank line after it edit the _abort function so it does what the user wants when a macro is aborted cd $TOP/mlabApp/op/adl medm mlab.adl add button labelled "-caputRec", with the following entry: label="caputRecorder", name="caputRecorder.adl", args="p=mlab:"