From 95d9c05f8a8173bd88fce84bf9df73001bf5f594 Mon Sep 17 00:00:00 2001
From: klang <klang@aps.anl.gov>
Date: Fri, 6 Jul 2018 17:46:51 -0500
Subject: [PATCH] Updated bash startup scripts

---
 setup_epics_common.sh | 219 ++++++++++++++++++++++++++++++++++++++++++
 start_MEDM_xxx.sh     |  57 +----------
 start_caQtDM_xxx.sh   | 154 ++---------------------------
 3 files changed, 233 insertions(+), 197 deletions(-)
 create mode 100644 setup_epics_common.sh

diff --git a/setup_epics_common.sh b/setup_epics_common.sh
new file mode 100644
index 0000000..9fadc9d
--- /dev/null
+++ b/setup_epics_common.sh
@@ -0,0 +1,219 @@
+#!/bin/bash -f
+
+DISPLAY_MANAGER=$1
+
+# caller (typically: start_****_xxx) MUST define:
+# EPICS_APP - Top level IOC directory
+# EPICS_APP_ADL_DIR - Location of adl file directory
+# EPICS_APP_UI_DIR  - Location of ui file directory
+
+# and must make this definition if the app name isn't the directory name:
+# EPICS_APP_NAME - different app name
+
+if [ "" != "${EPICS_APP_NAME}" ]; then
+	EPICS_APP_NAME=`basename ${EPICS_APP}`
+fi
+
+#######################################
+# support function to simplify repetitive task,
+# used to build up displaty path of supported modules
+#
+# usage::
+#
+#    addModule ENVIRONMENT_VARIABLE DISPLAY_TYPE [SUBDIRECTORY]
+#
+# TMP is a temporary display path
+# TMP is internal to this script, no need to export.
+
+function addModule
+{
+    # $1 is a symbol defined in <synApps>/configure/RELEASE
+    # module_path is the path defined for that symbol in the RELEASE file
+    module='$'$1
+    module_path=`eval echo $module`
+
+	if [ "$2" != "${DISPLAY_MANAGER}" ]; then
+		return 0
+	fi
+	
+    if [ "" != "${module}" ]; then
+        # module is required
+        addition=${module_path}
+        if [ "" != "$3" ]; then
+            # optional subdirectory path
+            addition+=/$3
+        fi
+        if [ -d "${addition}" ]; then
+            # proceed ONLY if new addition path exists
+            # Then, can define paths to all area detectors specific screens
+            if [ "" == "${TMP}" ]; then
+                # no existing path defined, start here
+                TMP=.
+            fi
+            TMP+=:${addition}
+        fi
+    fi
+}
+
+
+#######################################
+# get environment variables for support modules 
+
+output=`perl -s $EPICS_APP/release.pl -form=bash  $EPICS_APP`
+eval $output
+
+
+# ========  ================     ===============          ===========================
+# function  MODULE_VARIABLE      Display Manager          subdirectory with .ui files
+# ========  ================     ===============          ===========================
+addModule   EPICS_APP_ADL_DIR    medm                     
+addModule   EPICS_APP_UI_DIR     caqtdm                   
+addModule   EPICS_APP_UI_DIR     caqtdm                   /autoconvert
+
+addModule   ALIVE                medm                     /aliveApp/op/adl
+addModule   ALIVE                caqtdm                   /aliveApp/op/ui
+addModule   ALIVE                caqtdm                   /aliveApp/op/ui/autoconvert
+
+addModule   AREA_DETECTOR        medm                     /ADCore/ADApp/op/adl
+addModule   AREA_DETECTOR        caqtdm                   /ADCore/ADApp/op/ui
+addModule   AREA_DETECTOR        caqtdm                   /ADCore/ADApp/op/ui/autoconvert
+
+addModule   ADSIMDETECTOR        medm                     /simDetectorApp/op/adl
+addModule   ADSIMDETECTOR        caqtdm                   /simDetectorApp/op/ui
+addModule   ADSIMDETECTOR        caqtdm                   /simDetectorApp/op/ui/autoconvert
+
+addModule   ADURL                medm                     /urlApp/op/adl
+addModule   ADURL                caqtdm                   /urlApp/op/ui
+addModule   ADURL                caqtdm                   /urlApp/op/ui/autoconvert
+
+addModule   ASYN                 medm                     /opi/medm
+addModule   ASYN                 caqtdm                   /opi/caqtdm
+addModule   ASYN                 caqtdm                   /opi/caqtdm/autoconvert
+
+addModule   AUTOSAVE             medm                     /asApp/op/adl
+addModule   AUTOSAVE             caqtdm                   /asApp/op/ui
+addModule   AUTOSAVE             caqtdm                   /asApp/op/ui/autoconvert
+
+addModule   BUSY                 medm                     /busyApp/op/adl
+addModule   BUSY                 caqtdm                   /busyApp/op/ui
+addModule   BUSY                 caqtdm                   /busyApp/op/ui/autoconvert
+
+addModule   CALC                 medm                     /calcApp/op/adl
+addModule   CALC                 caqtdm                   /calcApp/op/ui
+addModule   CALC                 caqtdm                   /calcApp/op/ui/autoconvert
+
+addModule   CAMAC                medm                     /camacApp/op/adl
+addModule   CAMAC                caqtdm                   /camacApp/op/ui
+addModule   CAMAC                caqtdm                   /camacApp/op/ui/autoconvert
+
+addModule   CAPUTRECORDER        medm                     /caputRecorderApp/op/adl
+addModule   CAPUTRECORDER        caqtdm                   /caputRecorderApp/op/ui
+addModule   CAPUTRECORDER        caqtdm                   /caputRecorderApp/op/ui/autoconvert
+
+addModule   DAC128V              medm                     /dac128VApp/op/adl
+addModule   DAC128V              caqtdm                   /dac128VApp/op/ui
+addModule   DAC128V              caqtdm                   /dac128VApp/op/ui/autoconvert
+
+addModule   DELAYGEN             medm                     /delaygenApp/op/adl
+addModule   DELAYGEN             caqtdm                   /delaygenApp/op/ui
+addModule   DELAYGEN             caqtdm                   /delaygenApp/op/ui/autoconvert
+
+addModule   DXP                  medm                     /dxpApp/op/ui
+addModule   DXP                  caqtdm                   /dxpApp/op/ui
+addModule   DXP                  caqtdm                   /dxpApp/op/ui/autoconvert
+
+addModule   DXPSITORO            medm                     /dxpSITOROApp/op/adl
+addModule   DXPSITORO            caqtdm                   /dxpSITOROApp/op/ui
+addModule   DXPSITORO            caqtdm                   /dxpSITOROApp/op/ui/autoconvert
+
+addModule   DEVIOCSTATS          medm                     /op/adl
+addModule   DEVIOCSTATS          caqtdm                   /op/ui
+addModule   DEVIOCSTATS          caqtdm                   /op/ui/autoconvert
+
+addModule   FLY                  medm                     /flyApp/op/adl
+addModule   FLY                  caqtdm                   /flyApp/op/ui
+addModule   FLY                  caqtdm                   /flyApp/op/ui/autoconvert
+
+addModule   IP                   medm                     /ipApp/op/adl
+addModule   IP                   caqtdm                   /ipApp/op/ui
+addModule   IP                   caqtdm                   /ipApp/op/ui/autoconvert
+
+addModule   IP330                medm                     /ip330App/op/adl
+addModule   IP330                caqtdm                   /ip330App/op/ui
+addModule   IP330                caqtdm                   /ip330App/op/ui/autoconvert
+
+addModule   IPUNIDIG             medm                     /ipUnidigApp/op/adl
+addModule   IPUNIDIG             caqtdm                   /ipUnidigApp/op/ui
+addModule   IPUNIDIG             caqtdm                   /ipUnidigApp/op/ui/autoconvert
+
+addModule   LOVE                 medm                     /loveApp/op/adl
+addModule   LOVE                 caqtdm                   /loveApp/op/ui
+addModule   LOVE                 caqtdm                   /loveApp/op/ui/autoconvert
+
+addModule   LUA                  medm                     /luaApp/op/adl
+addModule   LUA                  caqtdm                   /luaApp/op/ui
+addModule   LUA                  caqtdm                   /luaApp/op/ui/autoconvert
+
+addModule   MCA                  medm                     /mcaApp/op/adl
+addModule   MCA                  caqtdm                   /mcaApp/op/ui
+addModule   MCA                  caqtdm                   /mcaApp/op/ui/autoconvert
+
+addModule   MODBUS               medm                     /modbusApp/op/adl
+addModule   MODBUS               caqtdm                   /modbusApp/op/ui
+addModule   MODBUS               caqtdm                   /modbusApp/op/ui/autoconvert
+
+addModule   MOTOR                medm                     /motorApp/op/adl
+addModule   MOTOR                caqtdm                   /motorApp/op/ui
+addModule   MOTOR                caqtdm                   /motorApp/op/ui/autoconvert
+
+addModule   OPTICS               medm                     /opticsApp/op/adl
+addModule   OPTICS               caqtdm                   /opticsApp/op/ui
+addModule   OPTICS               caqtdm                   /opticsApp/op/ui/autoconvert
+
+addModule   QUADEM               medm                     /quadEMApp/op/adl
+addModule   QUADEM               caqtdm                   /quadEMApp/op/ui
+addModule   QUADEM               caqtdm                   /quadEMApp/op/ui/autoconvert
+
+addModule   SOFTGLUE             medm                     /softGlueApp/op/adl
+addModule   SOFTGLUE             caqtdm                   /softGlueApp/op/ui
+addModule   SOFTGLUE             caqtdm                   /softGlueApp/op/ui/autoconvert
+
+addModule   SSCAN                medm                     /sscanApp/op/adl
+addModule   SSCAN                caqtdm                   /sscanApp/op/ui
+addModule   SSCAN                caqtdm                   /sscanApp/op/ui/autoconvert
+
+addModule   STD                  medm                     /stdApp/op/adl
+addModule   STD                  caqtdm                   /stdApp/op/ui
+addModule   STD                  caqtdm                   /stdApp/op/ui/autoconvert
+
+addModule   TDS3000              medm                     /medm
+
+addModule   VAC                  medm                     /vacApp/op/adl
+addModule   VAC                  caqtdm                   /vacApp/op/ui
+addModule   VAC                  caqtdm                   /vacApp/op/ui/autoconvert
+
+addModule   VME                  medm                     /vmeApp/op/adl
+addModule   VME                  caqtdm                   /vmeApp/op/ui
+addModule   VME                  caqtdm                   /vmeApp/op/ui/autoconvert
+
+addModule   YOKOGAWA_DAU         medm                     /mw100App/op/adl
+addModule   YOKOGAWA_DAU         caqtdm                   /mw100App/op/ui
+addModule   YOKOGAWA_DAU         caqtdm                   /mw100App/op/ui/autoconvert
+
+# ========  ================  ===========================
+
+if [ "$DISPLAY_MANAGER" == "medm" ]; then
+	if [ -z "$EPICS_DISPLAY_PATH" ]; then
+		export EPICS_DISPLAY_PATH=${TMP}
+	else
+		export EPICS_DISPLAY_PATH=${TMP}:${EPICS_DISPLAY_PATH}
+	fi
+fi
+
+if [ "$DISPLAY_MANAGER" == "caqtdm" ]; then
+	if [ -z "$CAQTDM_DISPLAY_PATH" ]; then
+		export CAQTDM_DISPLAY_PATH=${TMP}
+	else
+		export CAQTDM_DISPLAY_PATH=${TMP}:${CAQTDM_DISPLAY_PATH}
+	fi
+fi
diff --git a/start_MEDM_xxx.sh b/start_MEDM_xxx.sh
index c503700..f7990bf 100755
--- a/start_MEDM_xxx.sh
+++ b/start_MEDM_xxx.sh
@@ -1,56 +1,10 @@
 #!/bin/bash
 
-EPICS_APP=/home/oxygen/MOONEY/epics/synApps_5_5/support/xxx
-EPICS_APP_ADL_DIR=${EPICS_APP}/xxxApp/op/adl
+export EPICS_APP=`dirname $0`
+export EPICS_APP_ADL_DIR=${EPICS_APP}/xxxApp/op/adl
+export DEFAULT_UI_FILE=${DEFAULT_UI_FILE:-xxx.ui}
 
-output=`perl -s ${EPICS_APP}/release.pl -form=bash ${EPICS_APP}`
-eval $output
-
-#######################################
-# Prepare MEDM path
-# EDP is temporary EPICS_DISPLAY_PATH
-#
-function append_EDP { # note: in bash, macros are not expanded in aliases
-  if [ -d $1 ]  # this will keep keep out nonexistent directories
-  then
-    EDP=${EDP}:$1
-  fi
-}
-EDP=.
-append_EDP  ${EPICS_APP_ADL_DIR}
-append_EDP  ${ALIVE}/aliveApp/op/adl
-append_EDP  ${AREA_DETECTOR}/ADApp/op/adl
-append_EDP  ${AUTOSAVE}/asApp/op/adl
-append_EDP  ${BUSY}/busyApp/op/adl
-append_EDP  ${CALC}/calcApp/op/adl
-append_EDP  ${CAMAC}/camacApp/op/adl
-append_EDP  ${CAPUTRECORDER}/caputRecorderApp/op/adl
-append_EDP  ${DAC128V}/dac128VApp/op/adl
-append_EDP  ${DELAYGEN}/delaygenApp/op/adl
-append_EDP  ${DEVIOCSTATS}/op/adl
-append_EDP  ${DXP}/dxpApp/op/adl
-append_EDP  ${IP}/ipApp/op/adl
-append_EDP  ${IP330}/ip330App/op/adl
-append_EDP  ${IPUNIDIG}/ipUnidigApp/op/adl
-append_EDP  ${LOVE}/loveApp/op/adl
-append_EDP  ${MCA}/mcaApp/op/adl
-append_EDP  ${MOTOR}/motorApp/op/adl
-append_EDP  ${OPTICS}/opticsApp/op/adl
-append_EDP  ${QUADEM}/quadEMApp/op/adl
-append_EDP  ${SSCAN}/sscanApp/op/adl
-append_EDP  ${STD}/stdApp/op/adl
-append_EDP  ${VME}/vmeApp/op/adl
-append_EDP  ${ASYN}/opi/medm
-append_EDP  ${VAC}/vacApp/op/adl
-append_EDP  ${SOFTGLUE}/softGlueApp/op/adl
-
-if [ -z "$EPICS_DISPLAY_PATH" ] 
-then
-    export EPICS_DISPLAY_PATH=${EDP}
-else
-    export EPICS_DISPLAY_PATH=${EDP}:${EPICS_DISPLAY_PATH}
-fi
-echo ${EPICS_DISPLAY_PATH}
+source ./setup_epics_common.sh medm
 
 if [ -z "${MEDM_EXEC_LIST}" ] 
 then
@@ -67,5 +21,4 @@ export START_PUTRECORDER=${EPICS_APP}/start_putrecorder
 export MACROS_PY=${EPICS_APP_ADL_DIR}/../python/macros.py
 export EDITOR=nedit
 
-cd ${EPICS_APP}/xxxApp/op/adl
-medm xxx.adl&
+medm -x xxx.adl&
diff --git a/start_caQtDM_xxx.sh b/start_caQtDM_xxx.sh
index b1fd1d0..0023a89 100755
--- a/start_caQtDM_xxx.sh
+++ b/start_caQtDM_xxx.sh
@@ -4,160 +4,26 @@ export EPICS_APP=`dirname $0`
 export EPICS_APP_UI_DIR=${EPICS_APP}/xxxApp/op/ui
 export DEFAULT_UI_FILE=${DEFAULT_UI_FILE:-xxx.ui}
 
+source ./setup_epics_common.sh caqtdm
 
-#######################################
-# support function to simplify repetitive task,
-# used to build up displaty path of supported modules
-#
-# usage::
-#
-#    addModule ENVIRONMENT_VARIABLE [SUBDIRECTORY]
-#
-# QTDMDP is temporary CAQTDM_DISPLAY_PATH
-# QTDMDP is internal to this script, no need to export.
-
-function addModule
-{
-    # $1 is a symbol defined in <synApps>/configure/RELEASE
-    # module_path is the path defined for that symbol in the RELEASE file
-    module='$'$1
-    module_path=`eval echo $module`
-
-    if [ "" != "${module}" ]; then
-        # module is required
-        addition=${module_path}
-        if [ "" != "$2" ]; then
-            # optional subdirectory path
-            addition+=/$2
-        fi
-        if [ -d "${addition}" ]; then
-            # proceed ONLY if new addition path exists
-            # Then, can define paths to all area detectors specific screens
-            if [ "" == "${QTDMDP}" ]; then
-                # no existing path defined, start here
-                QTDMDP=.
-            fi
-            QTDMDP+=:${addition}
-        fi
-    fi
-}
-
-#######################################
-# get environment variables for support modules 
-
-output=`perl -s $EPICS_APP/release.pl -form=bash  $EPICS_APP`
-eval $output
-
-#######################################
-# add support for modules defined by environment variables
-# modules are *appended* to the growing list of directories
-
-if [ "" == "${ADSIMDETECTOR}" ]; then
-  export ADSIMDETECTOR=${AREA_DETECTOR}/ADSimDetector-R2-4
-fi
-
-# ========  ================  ===========================
-# function  MODULE_VARIABLE   subdirectory with .ui files
-# ========  ================  ===========================
-addModule   EPICS_APP_UI_DIR
-addModule   ALIVE             ./aliveApp/op/ui
-addModule   AREA_DETECTOR     ./ADCore/ADApp/op/ui
-addModule   ADCORE            ./ADApp/op/ui
-addModule   ADSIMDETECTOR     ./simDetectorApp/op/ui
-addModule   ADURL             ./urlApp/op/ui
-addModule   ASYN              ./opi/caqtdm
-addModule   AUTOSAVE          ./asApp/op/ui
-addModule   BUSY              ./busyApp/op/ui
-addModule   CALC              ./calcApp/op/ui
-addModule   CAMAC             ./camacApp/op/ui
-addModule   CAPUTRECORDER     ./caputRecorderApp/op/ui
-addModule   DAC128V           ./dac128VApp/op/ui
-addModule   DELAYGEN          ./delaygenApp/op/ui
-addModule   DXP               ./dxpApp/op/ui
-addModule   DEVIOCSTATS       ./op/ui
-addModule   IP                ./ipApp/op/ui
-addModule   IP330             ./ip330App/op/ui
-addModule   IPUNIDIG          ./ipUnidigApp/op/ui
-addModule   LOVE              ./loveApp/op/ui
-addModule   MCA               ./mcaApp/op/ui
-addModule   MODBUS            ./modbusApp/op/ui
-addModule   MOTOR             ./motorApp/op/ui
-addModule   OPTICS            ./opticsApp/op/ui
-addModule   QUADEM            ./quadEMApp/op/ui
-addModule   SOFTGLUE          ./softGlueApp/op/ui
-addModule   SSCAN             ./sscanApp/op/ui
-addModule   STD               ./stdApp/op/ui
-addModule   VAC               ./vacApp/op/ui
-addModule   VME               ./vmeApp/op/ui
-addModule   AREA_DETECTOR     ./ADCore/ADApp/op/ui/autoconvert
-addModule   ADCORE            ./ADApp/op/ui/autoconvert
-addModule   ADSIMDETECTOR     ./simDetectorApp/op/ui/autoconvert
-addModule   ADURL             ./urlApp/op/ui/autoconvert
-addModule   ASYN              ./opi/caqtdm/autoconvert
-addModule   AUTOSAVE          ./asApp/op/ui/autoconvert
-addModule   BUSY              ./busyApp/op/ui/autoconvert
-addModule   CALC              ./calcApp/op/ui/autoconvert
-addModule   CAMAC             ./camacApp/op/ui/autoconvert
-addModule   CAPUTRECORDER     ./caputRecorderApp/op/ui/autoconvert
-addModule   DAC128V           ./dac128VApp/op/ui/autoconvert
-addModule   DELAYGEN          ./delaygenApp/op/ui/autoconvert
-addModule   DXP               ./dxpApp/op/ui/autoconvert
-addModule   DEVIOCSTATS       ./op/ui/autoconvert
-addModule   IP                ./ipApp/op/ui/autoconvert
-addModule   IP330             ./ip330App/op/ui/autoconvert
-addModule   IPUNIDIG          ./ipUnidigApp/op/ui/autoconvert
-addModule   LOVE              ./loveApp/op/ui/autoconvert
-addModule   MCA               ./mcaApp/op/ui/autoconvert
-addModule   MODBUS            ./modbusApp/op/ui/autoconvert
-addModule   MOTOR             ./motorApp/op/ui/autoconvert
-addModule   OPTICS            ./opticsApp/op/ui/autoconvert
-addModule   QUADEM            ./quadEMApp/op/ui/autoconvert
-addModule   SOFTGLUE          ./softGlueApp/op/ui/autoconvert
-addModule   SSCAN             ./sscanApp/op/ui/autoconvert
-addModule   STD               ./stdApp/op/ui/autoconvert
-addModule   VAC               ./vacApp/op/ui/autoconvert
-addModule   VME               ./vmeApp/op/ui/autoconvert
-# ========  ================  ===========================
-
-
-#######################################
-# optional: add support directories not associated with environment variables
+# #######################################
+# # optional: add support directories not associated with environment variables
 
 if [ -z "/APSshare/caqtdm" ]; then
-  QTDMDP=${QTDMDP}:/APSshare/uisys/sr/id
+  CAQTDM_DISPLAY_PATH=$CAQTDM_DISPLAY_PATH:/APSshare/uisys/sr/id
 fi
 
-#######################################
-# Define CAQTDM_DISPLAY_PATH
-# the .ui file directory list for caQtDM
-
-if [ "" == "${CAQTDM_DISPLAY_PATH}" ]; then
-  export CAQTDM_DISPLAY_PATH=${QTDMDP}
-else
-  # either: pre-pend to display path
-  export CAQTDM_DISPLAY_PATH=${QTDMDP}:${CAQTDM_DISPLAY_PATH}
-
-  # or: append to display path
-  #export CAQTDM_DISPLAY_PATH=${CAQTDM_DISPLAY_PATH}:${QTDMDP}
-fi
 
-
-#######################################
-# optional: support for PVs with large data sizes, such as areaDetector
-# This should agree with the environment variable set by the ioc
-# see 'putenv "EPICS_CA_MAX_ARRAY_BYTES=64008"' in iocBoot/ioc<target>/st.cmd
+# #######################################
+# # optional: support for PVs with large data sizes, such as areaDetector
+# # This should agree with the environment variable set by the ioc
+# # see 'putenv "EPICS_CA_MAX_ARRAY_BYTES=64008"' in iocBoot/ioc<target>/st.cmd
 
 if [ "" == "${EPICS_CA_MAX_ARRAY_BYTES}" ]; then
   #export EPICS_CA_MAX_ARRAY_BYTES=64008
   export EPICS_CA_MAX_ARRAY_BYTES=8000100
 fi
 
-#######################################
-# optional: execute caQtDM in this support's ui directory
-
-cd ${EPICS_APP_UI_DIR}
-
-
 #######################################
 # optional: override system default environment variables for Qt and Qwt
 # These override system defaults for Qt, Qwt
@@ -205,9 +71,7 @@ fi
 
 #######################################
 # start caQtDM
-#caQtDM -noMsg xxx.ui &
 
-# allow for command line option to specify the file to be opened
-caQtDM -style plastique -noMsg ${1:-${DEFAULT_UI_FILE}}
+/APSshare/bin/caQtDM -style plastique -noMsg ${1:-${DEFAULT_UI_FILE}}
 # TODO: what about ALL command line parameters?  "$*"
 
-- 
GitLab