Compare commits
73 Commits
database-3
...
3.14
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
612d57a9b3 | ||
|
|
7dd1ea4cab | ||
|
|
922ed30136 | ||
|
|
9f9f119e7e | ||
|
|
d8214a4531 | ||
|
|
120b100e7e | ||
|
|
949e9d788a | ||
|
|
27c6e6a385 | ||
|
|
4b59476170 | ||
|
|
526b565c6b | ||
|
|
1b7b2bcceb | ||
|
|
49c925d064 | ||
|
|
d3bcf5737f | ||
|
|
6c5505ad3e | ||
|
|
4247d98b08 | ||
|
|
13735a8088 | ||
|
|
58d4242b68 | ||
|
|
8e42f516b0 | ||
|
|
9051cdbb34 | ||
|
|
2548a37267 | ||
|
|
1dc1b25aaa | ||
|
|
fb31dd784b | ||
| 89870e2817 | |||
| 4e9cf72d71 | |||
| 80869a0868 | |||
| 998fa984ba | |||
| 31844af88e | |||
| 8f161f9463 | |||
| e0399478ad | |||
|
|
2a2a1e54ac | ||
|
|
20d2cff501 | ||
|
|
860ce156a2 | ||
|
|
31fc35fbe8 | ||
| ab493264b2 | |||
| 68779943eb | |||
| 7a5ff26984 | |||
| eae59183cc | |||
|
|
b32629c3bf | ||
|
|
220e404203 | ||
|
|
8f55a1307d | ||
|
|
e459e8bdd4 | ||
|
|
b558bd9b16 | ||
|
|
3c16c3c0da | ||
|
|
67844bacc3 | ||
|
|
7e7d230d8c | ||
|
|
c1ece40f41 | ||
|
|
a732539eee | ||
|
|
3bc0805a89 | ||
|
|
c72e35c769 | ||
|
|
2d9c5e99a1 | ||
|
|
ca22d50831 | ||
|
|
5cb91d9f6d | ||
|
|
116c90c2ea | ||
|
|
3f3696fb91 | ||
|
|
91ce807e8b | ||
|
|
b9443f8813 | ||
|
|
b7d4609e57 | ||
|
|
c8a7e1597d | ||
|
|
ceaff61c09 | ||
|
|
6cc623a7b4 | ||
|
|
ac4d5c95ac | ||
|
|
de442e9584 | ||
|
|
713c2d5080 | ||
|
|
734d16291f | ||
|
|
1454f42a27 | ||
|
|
c830a3a4ee | ||
|
|
8a1477ecab | ||
|
|
006ce1a240 | ||
|
|
276dee2c3e | ||
|
|
98a2871727 | ||
|
|
5ca1bb3bd5 | ||
|
|
f6be3c7f70 | ||
|
|
00924dcba0 |
2
README
2
README
@@ -20,5 +20,5 @@ Additional information about EPICS including mailing list
|
|||||||
archives and subscription instructions, documentation and
|
archives and subscription instructions, documentation and
|
||||||
training materials, additional components, links to other
|
training materials, additional components, links to other
|
||||||
websites etc. is available on the EPICS home page at
|
websites etc. is available on the EPICS home page at
|
||||||
http://www.aps.anl.gov/epics/
|
https://epics.anl.gov/
|
||||||
|
|
||||||
|
|||||||
@@ -40,11 +40,12 @@ configuration:
|
|||||||
# Environment variables: compiler toolchain
|
# Environment variables: compiler toolchain
|
||||||
environment:
|
environment:
|
||||||
matrix:
|
matrix:
|
||||||
- TOOLCHAIN: 9.0
|
|
||||||
- TOOLCHAIN: 10.0
|
- TOOLCHAIN: 10.0
|
||||||
- TOOLCHAIN: 11.0
|
- TOOLCHAIN: 11.0
|
||||||
- TOOLCHAIN: 12.0
|
- TOOLCHAIN: 12.0
|
||||||
- TOOLCHAIN: 14.0
|
- TOOLCHAIN: 14.0
|
||||||
|
- APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
TOOLCHAIN: 2017
|
||||||
- TOOLCHAIN: cygwin
|
- TOOLCHAIN: cygwin
|
||||||
- TOOLCHAIN: mingw
|
- TOOLCHAIN: mingw
|
||||||
|
|
||||||
@@ -57,8 +58,6 @@ platform:
|
|||||||
matrix:
|
matrix:
|
||||||
exclude:
|
exclude:
|
||||||
# VS Express installs don't have the 64 bit compiler
|
# VS Express installs don't have the 64 bit compiler
|
||||||
- platform: x64
|
|
||||||
TOOLCHAIN: 9.0
|
|
||||||
- platform: x64
|
- platform: x64
|
||||||
TOOLCHAIN: 10.0
|
TOOLCHAIN: 10.0
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
:: Universal build script for AppVeyor (https://ci.appveyor.com/)
|
:: Universal build script for AppVeyor (https://ci.appveyor.com/)
|
||||||
:: Environment:
|
:: Environment:
|
||||||
:: TOOLCHAIN - toolchain version [9.0/10.0/11.0/12.0/14.0/cygwin/mingw]
|
:: TOOLCHAIN - toolchain version [10.0/11.0/12.0/14.0/2017/cygwin/mingw]
|
||||||
:: CONFIGURATION - determines EPICS build [dynamic/static]
|
:: CONFIGURATION - determines EPICS build [dynamic/static]
|
||||||
:: PLATFORM - architecture [x86/x64]
|
:: PLATFORM - architecture [x86/x64]
|
||||||
::
|
::
|
||||||
@@ -57,10 +57,22 @@ if "%TOOLCHAIN%"=="mingw" (
|
|||||||
)
|
)
|
||||||
|
|
||||||
set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio %TOOLCHAIN%"
|
set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio %TOOLCHAIN%"
|
||||||
|
if not exist "%VSINSTALL%\" set "VSINSTALL=C:\Program Files (x86)\Microsoft Visual Studio\%TOOLCHAIN%\Community"
|
||||||
|
if not exist "%VSINSTALL%\" goto MSMissing
|
||||||
|
|
||||||
set "MAKE=C:\tools\make"
|
set "MAKE=C:\tools\make"
|
||||||
|
|
||||||
|
echo [INFO] APPVEYOR_BUILD_WORKER_IMAGE=%APPVEYOR_BUILD_WORKER_IMAGE%
|
||||||
|
|
||||||
if "%OS%"=="64BIT" (
|
if "%OS%"=="64BIT" (
|
||||||
set EPICS_HOST_ARCH=windows-x64%ST%
|
set EPICS_HOST_ARCH=windows-x64%ST%
|
||||||
|
:: VS 2017
|
||||||
|
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat" (
|
||||||
|
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars64.bat"
|
||||||
|
where cl
|
||||||
|
if !ERRORLEVEL! NEQ 0 goto MSMissing
|
||||||
|
goto MSFound
|
||||||
|
)
|
||||||
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
|
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
|
||||||
call "%VSINSTALL%\VC\vcvarsall.bat" amd64
|
call "%VSINSTALL%\VC\vcvarsall.bat" amd64
|
||||||
where cl
|
where cl
|
||||||
@@ -79,6 +91,13 @@ if "%OS%"=="64BIT" (
|
|||||||
)
|
)
|
||||||
) else (
|
) else (
|
||||||
set EPICS_HOST_ARCH=win32-x86%ST%
|
set EPICS_HOST_ARCH=win32-x86%ST%
|
||||||
|
:: VS 2017
|
||||||
|
if exist "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat" (
|
||||||
|
call "%VSINSTALL%\VC\Auxiliary\Build\vcvars32.bat"
|
||||||
|
where cl
|
||||||
|
if !ERRORLEVEL! NEQ 0 goto MSMissing
|
||||||
|
goto MSFound
|
||||||
|
)
|
||||||
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
|
if exist "%VSINSTALL%\VC\vcvarsall.bat" (
|
||||||
call "%VSINSTALL%\VC\vcvarsall.bat" x86
|
call "%VSINSTALL%\VC\vcvarsall.bat" x86
|
||||||
where cl
|
where cl
|
||||||
|
|||||||
@@ -65,6 +65,6 @@ if "%TOOLCHAIN%"=="mingw" (
|
|||||||
)
|
)
|
||||||
|
|
||||||
echo [INFO] Installing Make 4.1
|
echo [INFO] Installing Make 4.1
|
||||||
@powershell -Command "(new-object net.webclient).DownloadFile('https://www.aps.anl.gov/epics/download/tools/make-4.1-win64.zip', 'C:\tools\make-4.1.zip')"
|
curl -fsS --retry 3 -o C:\tools\make-4.1.zip https://epics.anl.gov/download/tools/make-4.1-win64.zip
|
||||||
cd \tools
|
cd \tools
|
||||||
"C:\Program Files\7-Zip\7z" e make-4.1.zip
|
"C:\Program Files\7-Zip\7z" e make-4.1.zip
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ ticker() {
|
|||||||
|
|
||||||
CACHEKEY=1
|
CACHEKEY=1
|
||||||
|
|
||||||
EPICS_HOST_ARCH=`sh startup/EpicsHostArch`
|
EPICS_HOST_ARCH=`perl src/tools/EpicsHostArch.pl`
|
||||||
|
|
||||||
[ -e configure/os/CONFIG_SITE.Common.linux-x86 ] || die "Wrong location: $PWD"
|
[ -e configure/os/CONFIG_SITE.Common.linux-x86 ] || die "Wrong location: $PWD"
|
||||||
|
|
||||||
|
|||||||
@@ -20,11 +20,15 @@ else
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# Provide a default if the user hasn't set EPICS_HOST_ARCH
|
# Provide a default if the user hasn't set EPICS_HOST_ARCH
|
||||||
ifeq ($(origin EPICS_HOST_ARCH), undefined)
|
|
||||||
# NB: We use a simply expanded variable here for performance:
|
|
||||||
EPICS_HOST_ARCH := $(shell $(CONFIG)/../startup/EpicsHostArch.pl)
|
|
||||||
endif
|
|
||||||
#
|
#
|
||||||
|
ifeq ($(origin EPICS_HOST_ARCH), undefined)
|
||||||
|
# Bootstrapping ...
|
||||||
|
EHA := $(firstword $(wildcard $(EPICS_BASE)/lib/perl/EpicsHostArch.pl \
|
||||||
|
$(TOP)/src/tools/EpicsHostArch.pl))
|
||||||
|
# NB: We use a simply expanded variable here for performance:
|
||||||
|
export EPICS_HOST_ARCH := $(shell perl $(EHA))
|
||||||
|
EHA :=
|
||||||
|
endif
|
||||||
|
|
||||||
-include $(CONFIG)/os/CONFIG_COMPAT
|
-include $(CONFIG)/os/CONFIG_COMPAT
|
||||||
|
|
||||||
|
|||||||
@@ -28,19 +28,10 @@ EPICS_MODIFICATION = 12
|
|||||||
|
|
||||||
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
|
# EPICS_PATCH_LEVEL must be a number (win32 resource file requirement)
|
||||||
# Not included if zero
|
# Not included if zero
|
||||||
EPICS_PATCH_LEVEL = 6
|
EPICS_PATCH_LEVEL = 8
|
||||||
|
|
||||||
# This will end in -DEV between official releases
|
# This will end in -DEV between official releases
|
||||||
EPICS_DEV_SNAPSHOT=-DEV
|
EPICS_DEV_SNAPSHOT=
|
||||||
#EPICS_DEV_SNAPSHOT=-pre1
|
|
||||||
#EPICS_DEV_SNAPSHOT=-pre1-DEV
|
|
||||||
#EPICS_DEV_SNAPSHOT=-pre2
|
|
||||||
#EPICS_DEV_SNAPSHOT=-pre2-DEV
|
|
||||||
#EPICS_DEV_SNAPSHOT=-rc1
|
|
||||||
#EPICS_DEV_SNAPSHOT=-rc1-DEV
|
|
||||||
#EPICS_DEV_SNAPSHOT=-rc2
|
|
||||||
#EPICS_DEV_SNAPSHOT=-rc2-DEV
|
|
||||||
#EPICS_DEV_SNAPSHOT=
|
|
||||||
|
|
||||||
# No changes should be needed below here
|
# No changes should be needed below here
|
||||||
|
|
||||||
|
|||||||
@@ -34,35 +34,30 @@
|
|||||||
# The future dates below assume the rules don't get changed;
|
# The future dates below assume the rules don't get changed;
|
||||||
# see http://www.timeanddate.com/time/dst/2018.html to check.
|
# see http://www.timeanddate.com/time/dst/2018.html to check.
|
||||||
#
|
#
|
||||||
# DST for 2017 US: Mar 12 - Nov 05
|
|
||||||
# EU: Mar 26 - Oct 29
|
|
||||||
EPICS_TIMEZONE = CUS::360:031202:110502
|
|
||||||
#EPICS_TIMEZONE = MET::-60:032602:102902
|
|
||||||
#
|
|
||||||
# DST for 2018 US: Mar 11 - Nov 04
|
# DST for 2018 US: Mar 11 - Nov 04
|
||||||
# EU: Mar 25 - Oct 28
|
# EU: Mar 25 - Oct 28
|
||||||
#EPICS_TIMEZONE = CUS::360:031102:110402
|
EPICS_TIMEZONE = CUS::360:031102:110402
|
||||||
#EPICS_TIMEZONE = MET::-60:032502:102802
|
#EPICS_TIMEZONE = MET::-60:032502:102803
|
||||||
#
|
#
|
||||||
# DST for 2019 US: Mar 10 - Nov 03
|
# DST for 2019 US: Mar 10 - Nov 03
|
||||||
# EU: Mar 31 - Oct 27
|
# EU: Mar 31 - Oct 27
|
||||||
#EPICS_TIMEZONE = CUS::360:031002:110302
|
#EPICS_TIMEZONE = CUS::360:031002:110302
|
||||||
#EPICS_TIMEZONE = MET::-60:033102:102702
|
#EPICS_TIMEZONE = MET::-60:033102:102703
|
||||||
#
|
#
|
||||||
# DST for 2020 US: Mar 08 - Nov 01
|
# DST for 2020 US: Mar 08 - Nov 01
|
||||||
# EU: Mar 29 - Oct 25
|
# EU: Mar 29 - Oct 25
|
||||||
#EPICS_TIMEZONE = CUS::360:030802:110102
|
#EPICS_TIMEZONE = CUS::360:030802:110102
|
||||||
#EPICS_TIMEZONE = MET::-60:032902:102502
|
#EPICS_TIMEZONE = MET::-60:032902:102503
|
||||||
#
|
#
|
||||||
# DST for 2021 US: Mar 14 - Nov 07
|
# DST for 2021 US: Mar 14 - Nov 07
|
||||||
# EU: Mar 28 - Oct 31
|
# EU: Mar 28 - Oct 31
|
||||||
#EPICS_TIMEZONE = CUS::360:031402:110702
|
#EPICS_TIMEZONE = CUS::360:031402:110702
|
||||||
#EPICS_TIMEZONE = MET::-60:032802:103102
|
#EPICS_TIMEZONE = MET::-60:032802:103103
|
||||||
#
|
#
|
||||||
# DST for 2022 US: Mar 13 - Nov 06
|
# DST for 2022 US: Mar 13 - Nov 06
|
||||||
# EU: Mar 27 - Oct 30
|
# EU: Mar 27 - Oct 30
|
||||||
#EPICS_TIMEZONE = CUS::360:031302:110602
|
#EPICS_TIMEZONE = CUS::360:031302:110602
|
||||||
#EPICS_TIMEZONE = MET::-60:032702:103002
|
#EPICS_TIMEZONE = MET::-60:032702:103003
|
||||||
|
|
||||||
# EPICS_TS_NTP_INET
|
# EPICS_TS_NTP_INET
|
||||||
# NTP time server ip address for VxWorks and RTEMS.
|
# NTP time server ip address for VxWorks and RTEMS.
|
||||||
|
|||||||
@@ -301,6 +301,20 @@ $(foreach file, $(DBD_INSTALLS), $(eval $(call DBD_INSTALLS_template, $(file))))
|
|||||||
|
|
||||||
.PRECIOUS: $(COMMON_DBDS) $(COMMON_DIR)/%Include.dbd
|
.PRECIOUS: $(COMMON_DBDS) $(COMMON_DIR)/%Include.dbd
|
||||||
|
|
||||||
|
##################################################### HTML files
|
||||||
|
|
||||||
|
$(COMMON_DIR)/%.html: %.pm $(TOOLS)/podToHtml.pl
|
||||||
|
@$(RM) $(notdir $@)
|
||||||
|
$(PERL) $(TOOLS)/podToHtml.pl -o $(notdir $@) $<
|
||||||
|
@$(MV) $(notdir $@) $@
|
||||||
|
|
||||||
|
$(COMMON_DIR)/%.html: ../%.pm $(TOOLS)/podToHtml.pl
|
||||||
|
@$(RM) $(notdir $@)
|
||||||
|
$(PERL) $(TOOLS)/podToHtml.pl -o $(notdir $@) $<
|
||||||
|
@$(MV) $(notdir $@) $@
|
||||||
|
|
||||||
|
.PRECIOUS: $(COMMON_DIR)/%.html %.html
|
||||||
|
|
||||||
##################################################### DB files
|
##################################################### DB files
|
||||||
|
|
||||||
$(COMMON_DIR)/%.db$(RAW): $(COMMON_DIR)/%.edf
|
$(COMMON_DIR)/%.db$(RAW): $(COMMON_DIR)/%.edf
|
||||||
|
|||||||
@@ -500,6 +500,10 @@ $(INSTALL_HTML)/$(HTMLS_DIR)/%: ../%
|
|||||||
$(ECHO) "Installing html $@"
|
$(ECHO) "Installing html $@"
|
||||||
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
||||||
|
|
||||||
|
$(INSTALL_HTML)/$(HTMLS_DIR)/%: $(COMMON_DIR)/%
|
||||||
|
$(ECHO) "Installing generated html $@"
|
||||||
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
||||||
|
|
||||||
$(INSTALL_TEMPLATES_SUBDIR)/%: ../%
|
$(INSTALL_TEMPLATES_SUBDIR)/%: ../%
|
||||||
$(ECHO) "Installing $@"
|
$(ECHO) "Installing $@"
|
||||||
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
@$(INSTALL) -d -m $(INSTALL_PERMISSIONS) $< $(@D)
|
||||||
|
|||||||
@@ -85,16 +85,20 @@ CPP = cl -nologo -C -E
|
|||||||
|
|
||||||
# Configure OS vendor C++ compiler
|
# Configure OS vendor C++ compiler
|
||||||
#
|
#
|
||||||
# __STDC__=0 gives us both:
|
|
||||||
# 1) define STDC for code (pretend ANSI conformance)
|
|
||||||
# 2) set it to 0 to use MS C "extensions" (open for _open etc.)
|
|
||||||
# because MS uses: if __STDC__ ... disable many nice things
|
|
||||||
#
|
|
||||||
# -EHsc - generate code for exceptions
|
# -EHsc - generate code for exceptions
|
||||||
# -GR - generate code for run time type identification
|
# -GR - generate code for run time type identification
|
||||||
#
|
#
|
||||||
CCC = cl -EHsc -GR
|
CCC = cl -EHsc -GR
|
||||||
CODE_CPPFLAGS += -nologo -D__STDC__=0
|
|
||||||
|
# Other compiler flags, used for CPP, C and C++
|
||||||
|
#
|
||||||
|
# -FC - Show absolute path of source file in diagnostics
|
||||||
|
# -D__STDC__=0 gives us both:
|
||||||
|
# 1) define STDC for code (pretend ANSI conformance)
|
||||||
|
# 2) set it to 0 to use MS C "extensions" (open for _open etc.)
|
||||||
|
# because MS uses: if __STDC__ ... disable many nice things
|
||||||
|
#
|
||||||
|
CODE_CPPFLAGS += -nologo -FC -D__STDC__=0
|
||||||
CODE_CPPFLAGS += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
|
CODE_CPPFLAGS += -D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE
|
||||||
|
|
||||||
|
|
||||||
@@ -142,6 +146,17 @@ STATIC_LDLIBS_NO=
|
|||||||
STATIC_LDFLAGS=
|
STATIC_LDFLAGS=
|
||||||
RANLIB=
|
RANLIB=
|
||||||
|
|
||||||
|
#
|
||||||
|
# option needed for parallel builds with Visual Studio 2015 onward
|
||||||
|
#
|
||||||
|
# -FS Force Synchronous PDB Writes
|
||||||
|
ifneq ($(VisualStudioVersion),)
|
||||||
|
OPT_CXXFLAGS_NO += -FS
|
||||||
|
OPT_CFLAGS_NO += -FS
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
# add -profile here to run the ms profiler
|
# add -profile here to run the ms profiler
|
||||||
# -LTCG whole program optimization
|
# -LTCG whole program optimization
|
||||||
# -incremental:no full linking
|
# -incremental:no full linking
|
||||||
|
|||||||
@@ -4,27 +4,16 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
|
||||||
<title>Known Problems in R3.14.12.1</title>
|
<title>Known Problems in R3.14.12.8</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
<h1 style="text-align: center">EPICS Base R3.14.12.1: Known Problems</h1>
|
<h1 style="text-align: center">EPICS Base R3.14.12.8: Known Problems</h1>
|
||||||
|
|
||||||
<p>Any patch files linked below should be applied at the root of the
|
<p>This was the last release in the Base-3.14 series, so we are no longer
|
||||||
base-3.14.12.1 tree. Download them, then use the GNU Patch program as
|
tracking bugs in this branch. Please upgrade to one of the newer releases which
|
||||||
follows:</p>
|
have incorporated many bug fixes and new features since they branched off the
|
||||||
|
Base-3.14 release series.</p>
|
||||||
<blockquote><pre>% <b>cd <i>/path/to/</i>base-3.14.12.1</b>
|
|
||||||
% <b>patch -p0 < <i>/path/to/</i>file.patch</b></pre></blockquote>
|
|
||||||
|
|
||||||
<p>The following significant problems have been reported with this
|
|
||||||
version of EPICS Base:</p>
|
|
||||||
|
|
||||||
<ul>
|
|
||||||
|
|
||||||
<li>None yet.</li>
|
|
||||||
|
|
||||||
</ul>
|
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -221,14 +221,11 @@
|
|||||||
|
|
||||||
base/startup directory - contains scripts to set environment and path
|
base/startup directory - contains scripts to set environment and path
|
||||||
|
|
||||||
EpicsHostArch C shell script to set EPICS_HOST_ARCH env variable
|
EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
|
||||||
EpicsHostArch.pl Perl script to set EPICS_HOST_ARCH env variable
|
unix.csh C shell script to set path and env variables
|
||||||
Site.profile bourne shell script to set path and env variables
|
unix.sh Bourne shell script to set path and env variables
|
||||||
Site.cshrc c shell script to set path and env variables
|
win32.bat Bat file example to configure win32-x86 target
|
||||||
borland.bat WIN32 bat file to set borland path and env variables
|
windows.bat Bat file example to configure windows-x64 target
|
||||||
cygwin.bat WIN32 bat file to set cygwin path and env variables
|
|
||||||
win32.bat WIN32 bat file to set path and env variables
|
|
||||||
win32-debug.bat WIN32 debug bat file to set debug path and env variables
|
|
||||||
|
|
||||||
base/configure directory - contains build definitions and rules
|
base/configure directory - contains build definitions and rules
|
||||||
|
|
||||||
@@ -436,6 +433,6 @@
|
|||||||
|
|
||||||
References
|
References
|
||||||
|
|
||||||
1. http://www.aps.anl.gov/epics/base/tornado.php
|
1. https://epics.anl.gov/base/tornado.php
|
||||||
2. http://www.aps.anl.gov/epics/base/vxWorks6.php
|
2. https://epics.anl.gov/base/vxWorks6.php
|
||||||
3. http://www.aps.anl.gov/epics/
|
3. https://epics.anl.gov/
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ of my Bash login script (~/.bash_login):
|
|||||||
#
|
#
|
||||||
EPICS_BASE="${HOME}/src/EPICS/base"
|
EPICS_BASE="${HOME}/src/EPICS/base"
|
||||||
EPICS_EXTENSIONS="${HOME}/src/EPICS/extensions"
|
EPICS_EXTENSIONS="${HOME}/src/EPICS/extensions"
|
||||||
<strong>.</strong> "${EPICS_BASE}"/startup/Site.profile
|
<strong>.</strong> "${EPICS_BASE}"/startup/unix.sh
|
||||||
</pre>
|
</pre>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|||||||
@@ -96,8 +96,8 @@
|
|||||||
needed to build for these target systems. The absolute path to and version
|
needed to build for these target systems. The absolute path to and version
|
||||||
number of the vxWorks installation is normally specified in the
|
number of the vxWorks installation is normally specified in the
|
||||||
base/configure/os/CONFIG_SITE.Common.vxWorksCommon file. Consult the EPICS web
|
base/configure/os/CONFIG_SITE.Common.vxWorksCommon file. Consult the EPICS web
|
||||||
pages about <a href="http://www.aps.anl.gov/epics/base/tornado.php">vxWorks
|
pages about <a href="https://epics.anl.gov/base/tornado.php">vxWorks
|
||||||
5.x</a> and <a href="http://www.aps.anl.gov/epics/base/vxWorks6.php">vxWorks
|
5.x</a> and <a href="https://epics.anl.gov/base/vxWorks6.php">vxWorks
|
||||||
6.x</a> and the vxWorks documentation for information about configuring your
|
6.x</a> and the vxWorks documentation for information about configuring your
|
||||||
vxWorks operating system for use with EPICS.</P>
|
vxWorks operating system for use with EPICS.</P>
|
||||||
|
|
||||||
@@ -126,7 +126,7 @@
|
|||||||
|
|
||||||
<H3><A NAME="0_0_8"> Documentation</A></H3>
|
<H3><A NAME="0_0_8"> Documentation</A></H3>
|
||||||
<BLOCKQUOTE>EPICS documentation is available through the
|
<BLOCKQUOTE>EPICS documentation is available through the
|
||||||
<a href="http://www.aps.anl.gov/epics/">EPICS website</a> at Argonne.
|
<a href="https://epics.anl.gov/">EPICS website</a> at Argonne.
|
||||||
<P>Release specific documentation can also be found in the base/documentation
|
<P>Release specific documentation can also be found in the base/documentation
|
||||||
directory of the distribution.</BLOCKQUOTE>
|
directory of the distribution.</BLOCKQUOTE>
|
||||||
|
|
||||||
@@ -230,14 +230,11 @@
|
|||||||
|
|
||||||
<H4>base/startup directory - contains scripts to set environment and path</H4>
|
<H4>base/startup directory - contains scripts to set environment and path</H4>
|
||||||
<PRE>
|
<PRE>
|
||||||
EpicsHostArch C shell script to set EPICS_HOST_ARCH env variable
|
EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
|
||||||
EpicsHostArch.pl Perl script to set EPICS_HOST_ARCH env variable
|
unix.csh C shell script to set path and env variables
|
||||||
Site.profile bourne shell script to set path and env variables
|
unix.sh Bourne shell script to set path and env variables
|
||||||
Site.cshrc c shell script to set path and env variables
|
win32.bat Bat file example to configure win32-x86 target
|
||||||
borland.bat WIN32 bat file to set borland path and env variables
|
windows.bat Bat file example to configure windows-x64 target
|
||||||
cygwin.bat WIN32 bat file to set cygwin path and env variables
|
|
||||||
win32.bat WIN32 bat file to set path and env variables
|
|
||||||
win32-debug.bat WIN32 debug bat file to set debug path and env variables
|
|
||||||
</PRE>
|
</PRE>
|
||||||
|
|
||||||
<H4>base/configure directory - contains build definitions and rules</H4>
|
<H4>base/configure directory - contains build definitions and rules</H4>
|
||||||
|
|||||||
@@ -3,16 +3,134 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
|
||||||
<title>EPICS Base R3.14.12.7 Release Notes</title>
|
<title>EPICS Base R3.14.12.8 Release Notes</title>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body lang="en">
|
<body lang="en">
|
||||||
<h1 align="center">EPICS Base Release 3.14.12.7</h1>
|
<h1 align="center">EPICS Base Release 3.14.12.8</h1>
|
||||||
|
|
||||||
<h2 align="center">Changes between 3.14.12.6 and 3.14.12.7</h2>
|
<p>This is the final release in the Base-3.14 series, please upgrade to the
|
||||||
|
Base-3.15 series or to EPICS 7.</p>
|
||||||
|
|
||||||
|
<h2 align="center">Changes between 3.14.12.7 and 3.14.12.8</h2>
|
||||||
|
|
||||||
<!-- Insert new items immediately below here ... -->
|
<!-- Insert new items immediately below here ... -->
|
||||||
|
|
||||||
|
<h3>Fix broken <tt>EPICS_IOC_LOG_FILE_LIMIT=0</tt> setting</h3>
|
||||||
|
|
||||||
|
<p>The Application Developers' Guide says this is allowed and disables the
|
||||||
|
limit on the log-file, but it hasn't actually worked for some time (if ever).
|
||||||
|
Note that the iocLogServer will be removed from newer Base release sometime
|
||||||
|
soon as its functionality can be implemented by other dedicated log servers
|
||||||
|
such as logstash or syslog-ng.</p>
|
||||||
|
|
||||||
|
<p>Fixes <a href="https://bugs.launchpad.net/bugs/1786858">lp:1786858</a>
|
||||||
|
and part of <a href="https://bugs.launchpad.net/bugs/1786966">lp:1786966</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<h3>Cleanup of startup directory</h3>
|
||||||
|
|
||||||
|
<p>The files in the startup directory have not been maintained in recent years
|
||||||
|
and have grown crufty (technical term). This release includes the following
|
||||||
|
updates to these files:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
|
||||||
|
<li>The Perl <tt>EpicsHostArch.pl</tt> script has been rewritten, and support
|
||||||
|
for a few previously missing host architectures has been added to it.</li>
|
||||||
|
|
||||||
|
<li>The <tt>EpicsHostArch.pl</tt> script has also been moved into the standard
|
||||||
|
<tt>src/tools</tt> directory, from where it will be installed into
|
||||||
|
<tt>lib/perl</tt>. In this new location it is no longer executable, so it must
|
||||||
|
be run by the <tt>perl</tt> executable.</li>
|
||||||
|
|
||||||
|
<li>The build system has been adjusted to look for <tt>EpicsHostArch.pl</tt> in
|
||||||
|
both places if the <tt>EPICS_HOST_ARCH</tt> environment variable has not been
|
||||||
|
set at build-time.</li>
|
||||||
|
|
||||||
|
<li>Sites that used the original Perl script to set <tt>EPICS_HOST_ARCH</tt> as
|
||||||
|
part of their standard environment will need to adjust their scripts when they
|
||||||
|
upgrade to this release.</li>
|
||||||
|
|
||||||
|
<li>The <tt>EpicsHostArch</tt> shell script has been replaced with a wrapper
|
||||||
|
routine that calls the Perl <tt>EpicsHostArch.pl</tt> script. Sites that rely on
|
||||||
|
this script to set <tt>EPICS_HOST_ARCH</tt> should consider switching to the
|
||||||
|
Perl script instead.</li>
|
||||||
|
|
||||||
|
<li>The <tt>Site.cshrc</tt> and <tt>Site.profile</tt> files have been renamed to
|
||||||
|
<tt>unix.csh</tt> and <tt>unix.sh</tt>, respectively.</li>
|
||||||
|
|
||||||
|
<li>The existing <tt>win32.bat</tt> file has been cleaned up and a new
|
||||||
|
<tt>windows.bat</tt> file added for 64-bit targets. The contents of these files
|
||||||
|
should be seen as examples, don't uncomment or install parts for software that
|
||||||
|
you don't explicitly know that you need.</li>
|
||||||
|
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Recent Apple XCode Build Issues</h3>
|
||||||
|
|
||||||
|
<p>The latest version of XCode will not compile calls to <tt>system()</tt> or
|
||||||
|
<tt>clock_settime()</tt> for iOS targets. There were several places in Base
|
||||||
|
where these were being compiled, although there were probably never called. The
|
||||||
|
code has now been modified to permit iOS builds to complete again.</p>
|
||||||
|
|
||||||
|
<h3>Prevent illegal alarm severities</h3>
|
||||||
|
|
||||||
|
<p>A check has been added to <tt>recGblResetAlarms()</tt> that prevents records
|
||||||
|
from getting an alarm severity higher than INVALID_ALARM. It is still possible
|
||||||
|
for a field like HSV to get set to a value that is not a legal alarm severity,
|
||||||
|
but the core IOC code should never copy such a value into a record's SEVR or
|
||||||
|
ACKS fields. With this fix the record's alarm severity will be limited to
|
||||||
|
INVALID_ALARM.</p>
|
||||||
|
|
||||||
|
<h3>Fixes for Launchpad bugs</h3>
|
||||||
|
|
||||||
|
<p>The following launchpad bugs have fixes included:</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1786320">
|
||||||
|
lp: #1786320</a>, dbCa subscribes twice to ENUM</li>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/541221">
|
||||||
|
lp: #541221</a>, 'assert (pca->pgetNative)' failed in ../dbCa.c</li>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1747091">
|
||||||
|
lp: #1747091</a>, epicsTimeGetEvent() / generalTime bug</li>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1743076">
|
||||||
|
lp: #1743076</a>, Segfault in ca_attach_context() during exits</li>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1751380">
|
||||||
|
lp: #1751380</a>, Deadlock in ca_clear_subscription()</li>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1597809">
|
||||||
|
lp: #1597809</a>, Setting NAME field in DB file may break IOC</li>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1770292">
|
||||||
|
lp: #1770292</a>, get_alarm_double() inconsistent across record types</li>
|
||||||
|
<li><a href="https://bugs.launchpad.net/epics-base/+bug/1771298">
|
||||||
|
lp: #1771298</a>, Conversion of NaN to integer relies on undefined
|
||||||
|
behavior</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h3>Updated VxWorks Timezone settings</h3>
|
||||||
|
|
||||||
|
<p>Removed the settings for 2017; fixed the hour of the change for MET.</p>
|
||||||
|
|
||||||
|
<h3>Back-port podToHtml.pl and Rules from Base-3.15</h3>
|
||||||
|
|
||||||
|
<p>This script permits Base to be built with Perl installations that do not
|
||||||
|
provide the podchecker and pod2html scripts (e.g. Fedora 27).</p>
|
||||||
|
|
||||||
|
<h3>Fixed camonitor server side relative timestamps bug</h3>
|
||||||
|
|
||||||
|
<p>Initialize the first time-stamp from the first monitor, not the client-side
|
||||||
|
current time in this configuration.</p>
|
||||||
|
|
||||||
|
<h3>Build changes for MSVC</h3>
|
||||||
|
|
||||||
|
<p>Windows builds using Visual Studio 2015 and later now use the <tt>-FS</tt>
|
||||||
|
compiler option to allow parallel builds to work properly.</p>
|
||||||
|
|
||||||
|
<p>We now give the <tt>-FC</tt> option to tell the compiler to print absolute
|
||||||
|
paths for source files in diagnostic messages.</p>
|
||||||
|
|
||||||
|
<h2 align="center">Changes between 3.14.12.6 and 3.14.12.7</h2>
|
||||||
|
|
||||||
<h3>Extend maximum Posix epicsEventWaitWithTimeout() delay</h3>
|
<h3>Extend maximum Posix epicsEventWaitWithTimeout() delay</h3>
|
||||||
|
|
||||||
<p>The Posix implementation of epicsEventWaitWithTimeout() was limiting the
|
<p>The Posix implementation of epicsEventWaitWithTimeout() was limiting the
|
||||||
|
|||||||
@@ -2674,6 +2674,14 @@ automatically released by the system when the process exits and
|
|||||||
vxWorks or RTEMS no cleanup occurs unless the application calls
|
vxWorks or RTEMS no cleanup occurs unless the application calls
|
||||||
<code>ca_context_destroy()</code>.</p>
|
<code>ca_context_destroy()</code>.</p>
|
||||||
|
|
||||||
|
<p>Note: This operation blocks until any user callbacks for any channel
|
||||||
|
created in the current context have run to completion. If callbacks take a
|
||||||
|
lock (mutex) then it is the user's responsibility to ensure that this lock
|
||||||
|
is not held when <code>ca_clear_context()</code> is called, otherwise a
|
||||||
|
deadlock may ensue. (See also
|
||||||
|
<code><a href="#ca_clear_channel">ca_clear_channel</a>()</code> and
|
||||||
|
<code><a href="#ca_clear_event">ca_clear_subscription</a>()</code>.)</p>
|
||||||
|
|
||||||
<h4>Returns</h4>
|
<h4>Returns</h4>
|
||||||
|
|
||||||
<p>ECA_NORMAL - Normal successful completion</p>
|
<p>ECA_NORMAL - Normal successful completion</p>
|
||||||
@@ -2819,6 +2827,12 @@ efficiently sent over the network in one message.</p>
|
|||||||
clearing a channel does shutdown and reclaim any channel state change event
|
clearing a channel does shutdown and reclaim any channel state change event
|
||||||
subscriptions (monitors) registered with the channel.</p>
|
subscriptions (monitors) registered with the channel.</p>
|
||||||
|
|
||||||
|
<p>Note: This operation blocks until any user callbacks for this channel
|
||||||
|
have run to completion. If callbacks take a lock (mutex) then it is the
|
||||||
|
user's responsibility to ensure that this lock is not held when
|
||||||
|
<code>ca_clear_channel()</code> is called, otherwise a deadlock may ensue.
|
||||||
|
(See also <code><a href="#ca_clear_event">ca_clear_subscription</a>()</code>.)</p>
|
||||||
|
|
||||||
<h4>Arguments</h4>
|
<h4>Arguments</h4>
|
||||||
<dl>
|
<dl>
|
||||||
<dt><code>CHID</code></dt>
|
<dt><code>CHID</code></dt>
|
||||||
@@ -3200,6 +3214,13 @@ and not forwarded to the server until one of <code>ca_flush_io()</code>, <code>c
|
|||||||
<code>ca_pend_event()</code>, or <code>ca_sg_block()</code> are called. This allows several requests to be
|
<code>ca_pend_event()</code>, or <code>ca_sg_block()</code> are called. This allows several requests to be
|
||||||
efficiently sent together in one message.</p>
|
efficiently sent together in one message.</p>
|
||||||
|
|
||||||
|
<p>Note: This operation blocks until any user callbacks for this channel
|
||||||
|
have run to completion. If callbacks take a lock (mutex) then it is the
|
||||||
|
user's responsibility to ensure that this lock is not held when
|
||||||
|
<code>ca_clear_subscription()</code> is called, otherwise a deadlock may
|
||||||
|
ensue. (See also <code><a
|
||||||
|
href="#ca_clear_channel">ca_clear_channel</a>()</code>.)</p>
|
||||||
|
|
||||||
<h4>Arguments</h4>
|
<h4>Arguments</h4>
|
||||||
<dl>
|
<dl>
|
||||||
<dt>EVID</dt>
|
<dt>EVID</dt>
|
||||||
|
|||||||
@@ -127,21 +127,10 @@ const char * ca_message_text []
|
|||||||
|
|
||||||
static epicsThreadOnceId caClientContextIdOnce = EPICS_THREAD_ONCE_INIT;
|
static epicsThreadOnceId caClientContextIdOnce = EPICS_THREAD_ONCE_INIT;
|
||||||
|
|
||||||
extern "C" void ca_client_exit_handler (void *)
|
|
||||||
{
|
|
||||||
if ( caClientContextId ) {
|
|
||||||
epicsThreadPrivateDelete ( caClientContextId );
|
|
||||||
caClientContextId = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// runs once only for each process
|
// runs once only for each process
|
||||||
extern "C" void ca_init_client_context ( void * )
|
extern "C" void ca_init_client_context ( void * )
|
||||||
{
|
{
|
||||||
caClientContextId = epicsThreadPrivateCreate ();
|
caClientContextId = epicsThreadPrivateCreate ();
|
||||||
if ( caClientContextId ) {
|
|
||||||
epicsAtExit ( ca_client_exit_handler,0 );
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -639,7 +639,7 @@ not follow this pattern, but are still printable strings.
|
|||||||
|
|
||||||
=item [1] R3.14 Channel Access Reference Manual by Jeffrey O. Hill
|
=item [1] R3.14 Channel Access Reference Manual by Jeffrey O. Hill
|
||||||
|
|
||||||
L<http://www.aps.anl.gov/epics/base/R3-14/12-docs/CAref.html>
|
L<https://epics.anl.gov/base/R3-14/12-docs/CAref.html>
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
|
|||||||
@@ -66,10 +66,6 @@ ifdef T_A
|
|||||||
$(RM) $@ $@_new
|
$(RM) $@ $@_new
|
||||||
$(PERL) $(XSUBPP) -typemap $(EXTUTILS)/typemap $< > $@_new && $(MV) $@_new $@
|
$(PERL) $(XSUBPP) -typemap $(EXTUTILS)/typemap $< > $@_new && $(MV) $@_new $@
|
||||||
|
|
||||||
%.html: ../%.pm
|
|
||||||
$(RM) $@
|
|
||||||
podchecker $< && pod2html --infile=$< --outfile=$@
|
|
||||||
|
|
||||||
$(INSTALL_PERL_MODULES)/$(PERL_ARCHPATH)/%: %
|
$(INSTALL_PERL_MODULES)/$(PERL_ARCHPATH)/%: %
|
||||||
$(ECHO) "Installing loadable shared library $@"
|
$(ECHO) "Installing loadable shared library $@"
|
||||||
@$(INSTALL_LIBRARY) -d -m $(LIB_PERMISSIONS) $< $(INSTALL_PERL_MODULES)/$(PERL_ARCHPATH)
|
@$(INSTALL_LIBRARY) -d -m $(LIB_PERMISSIONS) $< $(INSTALL_PERL_MODULES)/$(PERL_ARCHPATH)
|
||||||
|
|||||||
@@ -140,6 +140,10 @@ sub display {
|
|||||||
printf " Lo ctrl limit: %g\n", $data->{lower_ctrl_limit};
|
printf " Lo ctrl limit: %g\n", $data->{lower_ctrl_limit};
|
||||||
printf " Hi ctrl limit: %g\n", $data->{upper_ctrl_limit};
|
printf " Hi ctrl limit: %g\n", $data->{upper_ctrl_limit};
|
||||||
}
|
}
|
||||||
|
if (exists $data->{ackt}) {
|
||||||
|
printf " Ack transients: %s\n", $data->{ackt} ? 'YES' : 'NO';
|
||||||
|
printf " Ack severity: %s\n", $data->{acks};
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
my $value = format_number($data, $type);
|
my $value = format_number($data, $type);
|
||||||
if ($opt_t) {
|
if ($opt_t) {
|
||||||
|
|||||||
@@ -88,8 +88,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
clientBufMemoryManager clientBufMemMgr;
|
clientBufMemoryManager clientBufMemMgr;
|
||||||
tsFreeList < casMonitor, 1024 > casMonitorFreeList;
|
tsFreeList < casMonitor, 1024 > casMonitorFreeList;
|
||||||
tsDLList < casStrmClient > clientList;
|
::tsDLList < casStrmClient > clientList;
|
||||||
tsDLList < casIntfOS > intfList;
|
::tsDLList < casIntfOS > intfList;
|
||||||
mutable epicsMutex mutex;
|
mutable epicsMutex mutex;
|
||||||
mutable epicsMutex diagnosticCountersMutex;
|
mutable epicsMutex diagnosticCountersMutex;
|
||||||
caServer & adapter;
|
caServer & adapter;
|
||||||
|
|||||||
@@ -646,6 +646,11 @@ caStatus casDGClient::processDG ()
|
|||||||
if ( status != S_cas_success ) {
|
if ( status != S_cas_success ) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( this->in.bytesPresent () > 0 && dgInBytesConsumed == 0 && status == S_cas_success ) {
|
||||||
|
this->in.removeMsg ( this->in.bytesPresent() );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -286,7 +286,7 @@ void casPVI::postEvent ( const casEventMask & select, const gdd & event )
|
|||||||
}
|
}
|
||||||
|
|
||||||
caStatus casPVI::installMonitor (
|
caStatus casPVI::installMonitor (
|
||||||
casMonitor & mon, tsDLList < casMonitor > & monitorList )
|
casMonitor & mon, ::tsDLList < casMonitor > & monitorList )
|
||||||
{
|
{
|
||||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||||
assert ( this->nMonAttached < UINT_MAX );
|
assert ( this->nMonAttached < UINT_MAX );
|
||||||
@@ -302,7 +302,7 @@ caStatus casPVI::installMonitor (
|
|||||||
}
|
}
|
||||||
|
|
||||||
casMonitor * casPVI::removeMonitor (
|
casMonitor * casPVI::removeMonitor (
|
||||||
tsDLList < casMonitor > & list, ca_uint32_t clientIdIn )
|
::tsDLList < casMonitor > & list, ca_uint32_t clientIdIn )
|
||||||
{
|
{
|
||||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||||
casMonitor * pMon = 0;
|
casMonitor * pMon = 0;
|
||||||
@@ -359,8 +359,8 @@ void casPVI::installChannel ( chanIntfForPV & chan )
|
|||||||
}
|
}
|
||||||
|
|
||||||
void casPVI::removeChannel (
|
void casPVI::removeChannel (
|
||||||
chanIntfForPV & chan, tsDLList < casMonitor > & src,
|
chanIntfForPV & chan, ::tsDLList < casMonitor > & src,
|
||||||
tsDLList < casMonitor > & dest )
|
::tsDLList < casMonitor > & dest )
|
||||||
{
|
{
|
||||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||||
src.removeAll ( dest );
|
src.removeAll ( dest );
|
||||||
@@ -374,7 +374,7 @@ void casPVI::removeChannel (
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void casPVI::clearOutstandingReads ( tsDLList < casAsyncIOI > & ioList )
|
void casPVI::clearOutstandingReads ( ::tsDLList < casAsyncIOI > & ioList )
|
||||||
{
|
{
|
||||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||||
|
|
||||||
@@ -394,7 +394,7 @@ void casPVI::clearOutstandingReads ( tsDLList < casAsyncIOI > & ioList )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void casPVI::destroyAllIO ( tsDLList < casAsyncIOI > & ioList )
|
void casPVI::destroyAllIO ( ::tsDLList < casAsyncIOI > & ioList )
|
||||||
{
|
{
|
||||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||||
while ( casAsyncIOI * pIO = ioList.get() ) {
|
while ( casAsyncIOI * pIO = ioList.get() ) {
|
||||||
@@ -406,7 +406,7 @@ void casPVI::destroyAllIO ( tsDLList < casAsyncIOI > & ioList )
|
|||||||
}
|
}
|
||||||
|
|
||||||
void casPVI::installIO (
|
void casPVI::installIO (
|
||||||
tsDLList < casAsyncIOI > & ioList, casAsyncIOI & io )
|
::tsDLList < casAsyncIOI > & ioList, casAsyncIOI & io )
|
||||||
{
|
{
|
||||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||||
ioList.add ( io );
|
ioList.add ( io );
|
||||||
@@ -415,7 +415,7 @@ void casPVI::installIO (
|
|||||||
}
|
}
|
||||||
|
|
||||||
void casPVI::uninstallIO (
|
void casPVI::uninstallIO (
|
||||||
tsDLList < casAsyncIOI > & ioList, casAsyncIOI & io )
|
::tsDLList < casAsyncIOI > & ioList, casAsyncIOI & io )
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
epicsGuard < epicsMutex > guard ( this->mutex );
|
epicsGuard < epicsMutex > guard ( this->mutex );
|
||||||
|
|||||||
@@ -49,21 +49,21 @@ public:
|
|||||||
caStatus attachToServer ( caServerI & cas );
|
caStatus attachToServer ( caServerI & cas );
|
||||||
aitIndex nativeCount ();
|
aitIndex nativeCount ();
|
||||||
bool ioIsPending () const;
|
bool ioIsPending () const;
|
||||||
void clearOutstandingReads ( tsDLList < class casAsyncIOI > &);
|
void clearOutstandingReads ( ::tsDLList < class casAsyncIOI > &);
|
||||||
void destroyAllIO (
|
void destroyAllIO (
|
||||||
tsDLList < casAsyncIOI > & );
|
::tsDLList < casAsyncIOI > & );
|
||||||
void installIO (
|
void installIO (
|
||||||
tsDLList < casAsyncIOI > &, casAsyncIOI & );
|
::tsDLList < casAsyncIOI > &, casAsyncIOI & );
|
||||||
void uninstallIO (
|
void uninstallIO (
|
||||||
tsDLList < casAsyncIOI > &, casAsyncIOI & );
|
::tsDLList < casAsyncIOI > &, casAsyncIOI & );
|
||||||
void installChannel ( chanIntfForPV & chan );
|
void installChannel ( chanIntfForPV & chan );
|
||||||
void removeChannel (
|
void removeChannel (
|
||||||
chanIntfForPV & chan, tsDLList < casMonitor > & src,
|
chanIntfForPV & chan, ::tsDLList < casMonitor > & src,
|
||||||
tsDLList < casMonitor > & dest );
|
::tsDLList < casMonitor > & dest );
|
||||||
caStatus installMonitor (
|
caStatus installMonitor (
|
||||||
casMonitor & mon, tsDLList < casMonitor > & monitorList );
|
casMonitor & mon, ::tsDLList < casMonitor > & monitorList );
|
||||||
casMonitor * removeMonitor (
|
casMonitor * removeMonitor (
|
||||||
tsDLList < casMonitor > & list, ca_uint32_t clientIdIn );
|
::tsDLList < casMonitor > & list, ca_uint32_t clientIdIn );
|
||||||
void deleteSignal ();
|
void deleteSignal ();
|
||||||
void postEvent ( const casEventMask & select, const gdd & event );
|
void postEvent ( const casEventMask & select, const gdd & event );
|
||||||
caServer * getExtServer () const;
|
caServer * getExtServer () const;
|
||||||
@@ -84,7 +84,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
mutable epicsMutex mutex;
|
mutable epicsMutex mutex;
|
||||||
tsDLList < chanIntfForPV > chanList;
|
::tsDLList < chanIntfForPV > chanList;
|
||||||
gddEnumStringTable enumStrTbl;
|
gddEnumStringTable enumStrTbl;
|
||||||
caServerI * pCAS;
|
caServerI * pCAS;
|
||||||
casPV * pPV;
|
casPV * pPV;
|
||||||
|
|||||||
@@ -416,6 +416,12 @@ char *dbr2str (const void *value, unsigned type)
|
|||||||
ptsNewS = &((struct TYPE *)value)->stamp; \
|
ptsNewS = &((struct TYPE *)value)->stamp; \
|
||||||
ptsNewC = &tsNow; \
|
ptsNewC = &tsNow; \
|
||||||
\
|
\
|
||||||
|
if (!tsInitS) \
|
||||||
|
{ \
|
||||||
|
tsFirst = *ptsNewS; \
|
||||||
|
tsInitS = 1; \
|
||||||
|
} \
|
||||||
|
\
|
||||||
switch (tsType) { \
|
switch (tsType) { \
|
||||||
case relative: \
|
case relative: \
|
||||||
ptsRefC = &tsStart; \
|
ptsRefC = &tsStart; \
|
||||||
@@ -508,12 +514,6 @@ void print_time_val_sts (pv* pv, unsigned long reqElems)
|
|||||||
epicsTimeGetCurrent(&tsNow);
|
epicsTimeGetCurrent(&tsNow);
|
||||||
epicsTimeToStrftime(timeText, TIMETEXTLEN, timeFormatStr, &tsNow);
|
epicsTimeToStrftime(timeText, TIMETEXTLEN, timeFormatStr, &tsNow);
|
||||||
|
|
||||||
if (!tsInitS)
|
|
||||||
{
|
|
||||||
tsFirst = tsNow;
|
|
||||||
tsInitS = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pv->nElems <= 1 && fieldSeparator == ' ') printf("%-30s", pv->name);
|
if (pv->nElems <= 1 && fieldSeparator == ' ') printf("%-30s", pv->name);
|
||||||
else printf("%s", pv->name);
|
else printf("%s", pv->name);
|
||||||
printf("%c", fieldSeparator);
|
printf("%c", fieldSeparator);
|
||||||
|
|||||||
@@ -297,10 +297,10 @@ static void get_alarm(DBADDR *paddr, char **ppbuffer,
|
|||||||
if (*options & DBR_AL_LONG) {
|
if (*options & DBR_AL_LONG) {
|
||||||
struct dbr_alLong *pal = (struct dbr_alLong*) pbuffer;
|
struct dbr_alLong *pal = (struct dbr_alLong*) pbuffer;
|
||||||
|
|
||||||
pal->upper_alarm_limit = (epicsInt32) ald.upper_alarm_limit;
|
pal->upper_alarm_limit = finite(ald.upper_alarm_limit) ? (epicsInt32) ald.upper_alarm_limit : 0;
|
||||||
pal->upper_warning_limit = (epicsInt32) ald.upper_warning_limit;
|
pal->upper_warning_limit = finite(ald.upper_warning_limit) ? (epicsInt32) ald.upper_warning_limit : 0;
|
||||||
pal->lower_warning_limit = (epicsInt32) ald.lower_warning_limit;
|
pal->lower_warning_limit = finite(ald.lower_warning_limit) ? (epicsInt32) ald.lower_warning_limit : 0;
|
||||||
pal->lower_alarm_limit = (epicsInt32) ald.lower_alarm_limit;
|
pal->lower_alarm_limit = finite(ald.lower_alarm_limit) ? (epicsInt32) ald.lower_alarm_limit : 0;
|
||||||
|
|
||||||
if (no_data)
|
if (no_data)
|
||||||
*options ^= DBR_AL_LONG; /*Turn off option*/
|
*options ^= DBR_AL_LONG; /*Turn off option*/
|
||||||
|
|||||||
@@ -409,7 +409,7 @@ long epicsShareAPI dbd(const char *record_name)
|
|||||||
|
|
||||||
precord = addr.precord;
|
precord = addr.precord;
|
||||||
|
|
||||||
if (! precord->bkpt & BKPT_ON_MASK) {
|
if (!(precord->bkpt & BKPT_ON_MASK)) {
|
||||||
printf(" BKPT> No breakpoint set in this record\n");
|
printf(" BKPT> No breakpoint set in this record\n");
|
||||||
return(S_db_bkptNotSet);
|
return(S_db_bkptNotSet);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -591,11 +591,16 @@ static void connectionCallback(struct connection_handler_args arg)
|
|||||||
if (pca->gotFirstConnection) {
|
if (pca->gotFirstConnection) {
|
||||||
if (pca->nelements != ca_element_count(arg.chid) ||
|
if (pca->nelements != ca_element_count(arg.chid) ||
|
||||||
pca->dbrType != ca_field_type(arg.chid)) {
|
pca->dbrType != ca_field_type(arg.chid)) {
|
||||||
/* BUG: We have no way to clear any old subscription with the
|
/* Size or type changed, clear everything and let the next call
|
||||||
* originally chosen data type/size. That will continue
|
to dbCaGetLink() and/or dbCaPutLink() reset everything */
|
||||||
* to send us data and will result in an assert() fail.
|
if (pca->evidNative) {
|
||||||
*/
|
ca_clear_event(pca->evidNative);
|
||||||
/* Let next dbCaGetLink and/or dbCaPutLink determine options */
|
pca->evidNative = 0;
|
||||||
|
}
|
||||||
|
if (pca->evidString) {
|
||||||
|
ca_clear_event(pca->evidString);
|
||||||
|
pca->evidString = 0;
|
||||||
|
}
|
||||||
plink->value.pv_link.pvlMask &=
|
plink->value.pv_link.pvlMask &=
|
||||||
~(pvlOptInpNative | pvlOptInpString |
|
~(pvlOptInpNative | pvlOptInpString |
|
||||||
pvlOptOutNative | pvlOptOutString);
|
pvlOptOutNative | pvlOptOutString);
|
||||||
@@ -643,6 +648,7 @@ static void eventCallback(struct event_handler_args arg)
|
|||||||
struct dbr_time_double *pdbr_time_double;
|
struct dbr_time_double *pdbr_time_double;
|
||||||
dbCaCallback monitor = 0;
|
dbCaCallback monitor = 0;
|
||||||
void *userPvt = 0;
|
void *userPvt = 0;
|
||||||
|
int doScan = 1;
|
||||||
|
|
||||||
assert(pca);
|
assert(pca);
|
||||||
epicsMutexMustLock(pca->lock);
|
epicsMutexMustLock(pca->lock);
|
||||||
@@ -671,10 +677,13 @@ static void eventCallback(struct event_handler_args arg)
|
|||||||
memcpy(pca->pgetString, dbr_value_ptr(arg.dbr, arg.type), size);
|
memcpy(pca->pgetString, dbr_value_ptr(arg.dbr, arg.type), size);
|
||||||
pca->gotInString = TRUE;
|
pca->gotInString = TRUE;
|
||||||
} else switch (arg.type){
|
} else switch (arg.type){
|
||||||
|
case DBR_TIME_ENUM:
|
||||||
|
/* Disable the record scan if we also have a string monitor */
|
||||||
|
doScan = !(plink->value.pv_link.pvlMask & pvlOptInpString);
|
||||||
|
/* fall through */
|
||||||
case DBR_TIME_STRING:
|
case DBR_TIME_STRING:
|
||||||
case DBR_TIME_SHORT:
|
case DBR_TIME_SHORT:
|
||||||
case DBR_TIME_FLOAT:
|
case DBR_TIME_FLOAT:
|
||||||
case DBR_TIME_ENUM:
|
|
||||||
case DBR_TIME_CHAR:
|
case DBR_TIME_CHAR:
|
||||||
case DBR_TIME_LONG:
|
case DBR_TIME_LONG:
|
||||||
case DBR_TIME_DOUBLE:
|
case DBR_TIME_DOUBLE:
|
||||||
@@ -690,7 +699,7 @@ static void eventCallback(struct event_handler_args arg)
|
|||||||
pca->sevr = pdbr_time_double->severity;
|
pca->sevr = pdbr_time_double->severity;
|
||||||
pca->stat = pdbr_time_double->status;
|
pca->stat = pdbr_time_double->status;
|
||||||
memcpy(&pca->timeStamp, &pdbr_time_double->stamp, sizeof(epicsTimeStamp));
|
memcpy(&pca->timeStamp, &pdbr_time_double->stamp, sizeof(epicsTimeStamp));
|
||||||
if (precord) {
|
if (doScan && precord) {
|
||||||
struct pv_link *ppv_link = &plink->value.pv_link;
|
struct pv_link *ppv_link = &plink->value.pv_link;
|
||||||
|
|
||||||
if ((ppv_link->pvlMask & pvlOptCP) ||
|
if ((ppv_link->pvlMask & pvlOptCP) ||
|
||||||
@@ -969,7 +978,8 @@ static void dbCaTask(void *arg)
|
|||||||
status = ca_add_array_event(
|
status = ca_add_array_event(
|
||||||
ca_field_type(pca->chid)+DBR_TIME_STRING,
|
ca_field_type(pca->chid)+DBR_TIME_STRING,
|
||||||
ca_element_count(pca->chid),
|
ca_element_count(pca->chid),
|
||||||
pca->chid, eventCallback, pca, 0.0, 0.0, 0.0, 0);
|
pca->chid, eventCallback, pca, 0.0, 0.0, 0.0,
|
||||||
|
&pca->evidNative);
|
||||||
if (status != ECA_NORMAL) {
|
if (status != ECA_NORMAL) {
|
||||||
errlogPrintf("dbCaTask ca_add_array_event %s\n",
|
errlogPrintf("dbCaTask ca_add_array_event %s\n",
|
||||||
ca_message(status));
|
ca_message(status));
|
||||||
@@ -981,7 +991,8 @@ static void dbCaTask(void *arg)
|
|||||||
pca->pgetString = dbCalloc(1, MAX_STRING_SIZE);
|
pca->pgetString = dbCalloc(1, MAX_STRING_SIZE);
|
||||||
epicsMutexUnlock(pca->lock);
|
epicsMutexUnlock(pca->lock);
|
||||||
status = ca_add_array_event(DBR_TIME_STRING, 1,
|
status = ca_add_array_event(DBR_TIME_STRING, 1,
|
||||||
pca->chid, eventCallback, pca, 0.0, 0.0, 0.0, 0);
|
pca->chid, eventCallback, pca, 0.0, 0.0, 0.0,
|
||||||
|
&pca->evidString);
|
||||||
if (status != ECA_NORMAL) {
|
if (status != ECA_NORMAL) {
|
||||||
errlogPrintf("dbCaTask ca_add_array_event %s\n",
|
errlogPrintf("dbCaTask ca_add_array_event %s\n",
|
||||||
ca_message(status));
|
ca_message(status));
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ typedef struct caLink
|
|||||||
char *pgetString;
|
char *pgetString;
|
||||||
void *pputNative;
|
void *pputNative;
|
||||||
char *pputString;
|
char *pputString;
|
||||||
|
evid evidNative;
|
||||||
|
evid evidString;
|
||||||
char gotInNative;
|
char gotInNative;
|
||||||
char gotInString;
|
char gotInString;
|
||||||
char gotOutNative;
|
char gotOutNative;
|
||||||
|
|||||||
@@ -90,6 +90,7 @@ struct event_user {
|
|||||||
epicsMutexId lock;
|
epicsMutexId lock;
|
||||||
epicsEventId ppendsem; /* Wait while empty */
|
epicsEventId ppendsem; /* Wait while empty */
|
||||||
epicsEventId pflush_sem; /* wait for flush */
|
epicsEventId pflush_sem; /* wait for flush */
|
||||||
|
epicsEventId pexitsem; /* wait for event task to join */
|
||||||
|
|
||||||
EXTRALABORFUNC *extralabor_sub;/* off load to event task */
|
EXTRALABORFUNC *extralabor_sub;/* off load to event task */
|
||||||
void *extralabor_arg;/* parameter to above */
|
void *extralabor_arg;/* parameter to above */
|
||||||
@@ -134,6 +135,8 @@ static char *EVENT_PEND_NAME = "eventTask";
|
|||||||
|
|
||||||
static struct evSubscrip canceledEvent;
|
static struct evSubscrip canceledEvent;
|
||||||
|
|
||||||
|
static epicsMutexId stopSync;
|
||||||
|
|
||||||
static unsigned short ringSpace ( const struct event_que *pevq )
|
static unsigned short ringSpace ( const struct event_que *pevq )
|
||||||
{
|
{
|
||||||
if ( pevq->evque[pevq->putix] == EVENTQEMPTY ) {
|
if ( pevq->evque[pevq->putix] == EVENTQEMPTY ) {
|
||||||
@@ -275,6 +278,10 @@ dbEventCtx epicsShareAPI db_init_events (void)
|
|||||||
{
|
{
|
||||||
struct event_user * evUser;
|
struct event_user * evUser;
|
||||||
|
|
||||||
|
if (!stopSync) {
|
||||||
|
stopSync = epicsMutexMustCreate();
|
||||||
|
}
|
||||||
|
|
||||||
if (!dbevEventUserFreeList) {
|
if (!dbevEventUserFreeList) {
|
||||||
freeListInitPvt(&dbevEventUserFreeList,
|
freeListInitPvt(&dbevEventUserFreeList,
|
||||||
sizeof(struct event_user),8);
|
sizeof(struct event_user),8);
|
||||||
@@ -294,37 +301,48 @@ dbEventCtx epicsShareAPI db_init_events (void)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Flag will be cleared when event task starts */
|
||||||
|
evUser->pendexit = TRUE;
|
||||||
|
|
||||||
evUser->firstque.evUser = evUser;
|
evUser->firstque.evUser = evUser;
|
||||||
evUser->firstque.writelock = epicsMutexCreate();
|
evUser->firstque.writelock = epicsMutexCreate();
|
||||||
if (!evUser->firstque.writelock) {
|
if (!evUser->firstque.writelock)
|
||||||
return NULL;
|
goto fail;
|
||||||
}
|
|
||||||
|
|
||||||
evUser->ppendsem = epicsEventCreate(epicsEventEmpty);
|
evUser->ppendsem = epicsEventCreate(epicsEventEmpty);
|
||||||
if (!evUser->ppendsem) {
|
if (!evUser->ppendsem)
|
||||||
epicsMutexDestroy (evUser->firstque.writelock);
|
goto fail;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
evUser->pflush_sem = epicsEventCreate(epicsEventEmpty);
|
evUser->pflush_sem = epicsEventCreate(epicsEventEmpty);
|
||||||
if (!evUser->pflush_sem) {
|
if (!evUser->pflush_sem)
|
||||||
epicsMutexDestroy (evUser->firstque.writelock);
|
goto fail;
|
||||||
epicsEventDestroy (evUser->ppendsem);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
evUser->lock = epicsMutexCreate();
|
evUser->lock = epicsMutexCreate();
|
||||||
if (!evUser->lock) {
|
if (!evUser->lock)
|
||||||
epicsMutexDestroy (evUser->firstque.writelock);
|
goto fail;
|
||||||
epicsEventDestroy (evUser->pflush_sem);
|
evUser->pexitsem = epicsEventCreate(epicsEventEmpty);
|
||||||
epicsEventDestroy (evUser->ppendsem);
|
if (!evUser->pexitsem)
|
||||||
return NULL;
|
goto fail;
|
||||||
}
|
|
||||||
|
|
||||||
evUser->flowCtrlMode = FALSE;
|
evUser->flowCtrlMode = FALSE;
|
||||||
evUser->extraLaborBusy = FALSE;
|
evUser->extraLaborBusy = FALSE;
|
||||||
evUser->pSuicideEvent = NULL;
|
evUser->pSuicideEvent = NULL;
|
||||||
return (dbEventCtx) evUser;
|
return (dbEventCtx) evUser;
|
||||||
|
fail:
|
||||||
|
if(evUser->lock)
|
||||||
|
epicsMutexDestroy (evUser->lock);
|
||||||
|
if(evUser->firstque.writelock)
|
||||||
|
epicsMutexDestroy (evUser->firstque.writelock);
|
||||||
|
if(evUser->ppendsem)
|
||||||
|
epicsEventDestroy (evUser->ppendsem);
|
||||||
|
if(evUser->pflush_sem)
|
||||||
|
epicsEventDestroy (evUser->pflush_sem);
|
||||||
|
if(evUser->pexitsem)
|
||||||
|
epicsEventDestroy (evUser->pexitsem);
|
||||||
|
freeListFree(dbevEventUserFreeList,evUser);
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* intentionally leak stopSync to avoid possible shutdown races */
|
||||||
/*
|
/*
|
||||||
* DB_CLOSE_EVENTS()
|
* DB_CLOSE_EVENTS()
|
||||||
*
|
*
|
||||||
@@ -346,10 +364,30 @@ void epicsShareAPI db_close_events (dbEventCtx ctx)
|
|||||||
* hazardous to the system's health.
|
* hazardous to the system's health.
|
||||||
*/
|
*/
|
||||||
epicsMutexMustLock ( evUser->lock );
|
epicsMutexMustLock ( evUser->lock );
|
||||||
evUser->pendexit = TRUE;
|
if(!evUser->pendexit) { /* event task running */
|
||||||
|
evUser->pendexit = TRUE;
|
||||||
|
epicsMutexUnlock ( evUser->lock );
|
||||||
|
|
||||||
|
/* notify the waiting task */
|
||||||
|
epicsEventSignal(evUser->ppendsem);
|
||||||
|
/* wait for task to exit */
|
||||||
|
epicsEventMustWait(evUser->pexitsem);
|
||||||
|
|
||||||
|
epicsMutexMustLock ( evUser->lock );
|
||||||
|
}
|
||||||
|
|
||||||
epicsMutexUnlock ( evUser->lock );
|
epicsMutexUnlock ( evUser->lock );
|
||||||
/* notify the waiting task */
|
|
||||||
epicsEventSignal(evUser->ppendsem);
|
epicsMutexMustLock (stopSync);
|
||||||
|
|
||||||
|
epicsEventDestroy(evUser->pexitsem);
|
||||||
|
epicsEventDestroy(evUser->ppendsem);
|
||||||
|
epicsEventDestroy(evUser->pflush_sem);
|
||||||
|
epicsMutexDestroy(evUser->lock);
|
||||||
|
|
||||||
|
epicsMutexUnlock (stopSync);
|
||||||
|
|
||||||
|
freeListFree(dbevEventUserFreeList, evUser);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -977,14 +1015,17 @@ static void event_task (void *pParm)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
epicsEventDestroy(evUser->ppendsem);
|
|
||||||
epicsEventDestroy(evUser->pflush_sem);
|
|
||||||
epicsMutexDestroy(evUser->lock);
|
|
||||||
|
|
||||||
freeListFree(dbevEventUserFreeList, evUser);
|
|
||||||
|
|
||||||
taskwdRemove(epicsThreadGetIdSelf());
|
taskwdRemove(epicsThreadGetIdSelf());
|
||||||
|
|
||||||
|
/* use stopSync to ensure pexitsem is not destroy'd
|
||||||
|
* until epicsEventSignal() has returned.
|
||||||
|
*/
|
||||||
|
epicsMutexMustLock (stopSync);
|
||||||
|
|
||||||
|
epicsEventSignal(evUser->pexitsem);
|
||||||
|
|
||||||
|
epicsMutexUnlock(stopSync);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1008,7 +1049,6 @@ int epicsShareAPI db_start_events (
|
|||||||
return DB_EVENT_OK;
|
return DB_EVENT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
evUser->pendexit = FALSE;
|
|
||||||
evUser->init_func = init_func;
|
evUser->init_func = init_func;
|
||||||
evUser->init_func_arg = init_func_arg;
|
evUser->init_func_arg = init_func_arg;
|
||||||
if (!taskname) {
|
if (!taskname) {
|
||||||
@@ -1022,6 +1062,7 @@ int epicsShareAPI db_start_events (
|
|||||||
epicsMutexUnlock ( evUser->lock );
|
epicsMutexUnlock ( evUser->lock );
|
||||||
return DB_EVENT_ERROR;
|
return DB_EVENT_ERROR;
|
||||||
}
|
}
|
||||||
|
evUser->pendexit = FALSE;
|
||||||
epicsMutexUnlock ( evUser->lock );
|
epicsMutexUnlock ( evUser->lock );
|
||||||
return DB_EVENT_OK;
|
return DB_EVENT_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -525,10 +525,10 @@ long epicsShareAPI dblsr(char *recordname,int level)
|
|||||||
printf(" Not Locked\n");
|
printf(" Not Locked\n");
|
||||||
} else {
|
} else {
|
||||||
printf(" thread %p",plockSet->thread_id);
|
printf(" thread %p",plockSet->thread_id);
|
||||||
if(! plockSet->precord || !plockSet->precord->name)
|
if(! plockSet->precord)
|
||||||
printf(" NULL record or record name\n");
|
printf(" NULL record\n");
|
||||||
else
|
else
|
||||||
printf(" record %s\n",plockSet->precord->name);
|
printf(" record %s\n",plockSet->precord->name);
|
||||||
}
|
}
|
||||||
if(level==0) { if(recordname) break; continue; }
|
if(level==0) { if(recordname) break; continue; }
|
||||||
for(plockRecord = (lockRecord *)ellFirst(&plockSet->lockRecordList);
|
for(plockRecord = (lockRecord *)ellFirst(&plockSet->lockRecordList);
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
||||||
#include "dbDefs.h"
|
#include "dbDefs.h"
|
||||||
|
#include "alarm.h"
|
||||||
#include "epicsMath.h"
|
#include "epicsMath.h"
|
||||||
#include "epicsTime.h"
|
#include "epicsTime.h"
|
||||||
#include "epicsPrint.h"
|
#include "epicsPrint.h"
|
||||||
@@ -222,6 +223,9 @@ unsigned short epicsShareAPI recGblResetAlarms(void *precord)
|
|||||||
epicsEnum16 val_mask = 0;
|
epicsEnum16 val_mask = 0;
|
||||||
epicsEnum16 stat_mask = 0;
|
epicsEnum16 stat_mask = 0;
|
||||||
|
|
||||||
|
if (new_sevr > INVALID_ALARM)
|
||||||
|
new_sevr = INVALID_ALARM;
|
||||||
|
|
||||||
pdbc->stat = new_stat;
|
pdbc->stat = new_stat;
|
||||||
pdbc->sevr = new_sevr;
|
pdbc->sevr = new_sevr;
|
||||||
pdbc->nsta = 0;
|
pdbc->nsta = 0;
|
||||||
|
|||||||
@@ -960,23 +960,29 @@ static void dbRecordHead(char *recordType, char *name, int visible)
|
|||||||
|
|
||||||
static void dbRecordField(char *name,char *value)
|
static void dbRecordField(char *name,char *value)
|
||||||
{
|
{
|
||||||
DBENTRY *pdbentry;
|
DBENTRY *pdbentry;
|
||||||
tempListNode *ptempListNode;
|
tempListNode *ptempListNode;
|
||||||
long status;
|
long status;
|
||||||
|
|
||||||
if(duplicate) return;
|
if (duplicate) return;
|
||||||
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
||||||
pdbentry = ptempListNode->item;
|
pdbentry = ptempListNode->item;
|
||||||
status = dbFindField(pdbentry,name);
|
status = dbFindField(pdbentry,name);
|
||||||
if(status) {
|
if (status) {
|
||||||
epicsPrintf("Record \"%s\" does not have a field \"%s\"\n",
|
epicsPrintf("Record \"%s\" does not have a field \"%s\"\n",
|
||||||
dbGetRecordName(pdbentry), name);
|
dbGetRecordName(pdbentry), name);
|
||||||
yyerror(NULL);
|
yyerror(NULL);
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
if (pdbentry->indfield == 0) {
|
||||||
|
epicsPrintf("Can't set \"NAME\" field of record \"%s\"\n",
|
||||||
|
dbGetRecordName(pdbentry));
|
||||||
|
yyerror(NULL);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
dbTranslateEscape(value, value); /* yuck: in-place, but safe */
|
dbTranslateEscape(value, value); /* yuck: in-place, but safe */
|
||||||
status = dbPutString(pdbentry,value);
|
status = dbPutString(pdbentry,value);
|
||||||
if(status) {
|
if (status) {
|
||||||
epicsPrintf("Can't set \"%s.%s\" to \"%s\"\n",
|
epicsPrintf("Can't set \"%s.%s\" to \"%s\"\n",
|
||||||
dbGetRecordName(pdbentry), name, value);
|
dbGetRecordName(pdbentry), name, value);
|
||||||
yyerror(NULL);
|
yyerror(NULL);
|
||||||
@@ -986,33 +992,33 @@ static void dbRecordField(char *name,char *value)
|
|||||||
|
|
||||||
static void dbRecordInfo(char *name, char *value)
|
static void dbRecordInfo(char *name, char *value)
|
||||||
{
|
{
|
||||||
DBENTRY *pdbentry;
|
DBENTRY *pdbentry;
|
||||||
tempListNode *ptempListNode;
|
tempListNode *ptempListNode;
|
||||||
long status;
|
long status;
|
||||||
|
|
||||||
if(duplicate) return;
|
if (duplicate) return;
|
||||||
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
||||||
pdbentry = ptempListNode->item;
|
pdbentry = ptempListNode->item;
|
||||||
status = dbPutInfo(pdbentry,name,value);
|
status = dbPutInfo(pdbentry,name,value);
|
||||||
if(status) {
|
if (status) {
|
||||||
epicsPrintf("Can't set \"%s\" info \"%s\" to \"%s\"\n",
|
epicsPrintf("Can't set \"%s\" info \"%s\" to \"%s\"\n",
|
||||||
dbGetRecordName(pdbentry), name, value);
|
dbGetRecordName(pdbentry), name, value);
|
||||||
yyerror(NULL);
|
yyerror(NULL);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void dbRecordAlias(char *name)
|
static void dbRecordAlias(char *name)
|
||||||
{
|
{
|
||||||
DBENTRY *pdbentry;
|
DBENTRY *pdbentry;
|
||||||
tempListNode *ptempListNode;
|
tempListNode *ptempListNode;
|
||||||
long status;
|
long status;
|
||||||
|
|
||||||
if(duplicate) return;
|
if (duplicate) return;
|
||||||
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
ptempListNode = (tempListNode *)ellFirst(&tempList);
|
||||||
pdbentry = ptempListNode->item;
|
pdbentry = ptempListNode->item;
|
||||||
status = dbCreateAlias(pdbentry, name);
|
status = dbCreateAlias(pdbentry, name);
|
||||||
if(status) {
|
if (status) {
|
||||||
epicsPrintf("Can't create alias \"%s\" for \"%s\"\n",
|
epicsPrintf("Can't create alias \"%s\" for \"%s\"\n",
|
||||||
name, dbGetRecordName(pdbentry));
|
name, dbGetRecordName(pdbentry));
|
||||||
yyerror(NULL);
|
yyerror(NULL);
|
||||||
@@ -1022,15 +1028,16 @@ static void dbRecordAlias(char *name)
|
|||||||
|
|
||||||
static void dbAlias(char *name, char *alias)
|
static void dbAlias(char *name, char *alias)
|
||||||
{
|
{
|
||||||
DBENTRY dbEntry;
|
DBENTRY dbEntry;
|
||||||
DBENTRY *pdbEntry = &dbEntry;
|
DBENTRY *pdbEntry = &dbEntry;
|
||||||
|
|
||||||
dbInitEntry(pdbbase, pdbEntry);
|
dbInitEntry(pdbbase, pdbEntry);
|
||||||
if (dbFindRecord(pdbEntry, name)) {
|
if (dbFindRecord(pdbEntry, name)) {
|
||||||
epicsPrintf("Alias \"%s\" refers to unknown record \"%s\"\n",
|
epicsPrintf("Alias \"%s\" refers to unknown record \"%s\"\n",
|
||||||
alias, name);
|
alias, name);
|
||||||
yyerror(NULL);
|
yyerror(NULL);
|
||||||
} else if (dbCreateAlias(pdbEntry, alias)) {
|
}
|
||||||
|
else if (dbCreateAlias(pdbEntry, alias)) {
|
||||||
epicsPrintf("Can't create alias \"%s\" referring to \"%s\"\n",
|
epicsPrintf("Can't create alias \"%s\" referring to \"%s\"\n",
|
||||||
alias, name);
|
alias, name);
|
||||||
yyerror(NULL);
|
yyerror(NULL);
|
||||||
@@ -1040,14 +1047,14 @@ static void dbAlias(char *name, char *alias)
|
|||||||
|
|
||||||
static void dbRecordBody(void)
|
static void dbRecordBody(void)
|
||||||
{
|
{
|
||||||
DBENTRY *pdbentry;
|
DBENTRY *pdbentry;
|
||||||
|
|
||||||
if(duplicate) {
|
if (duplicate) {
|
||||||
duplicate = FALSE;
|
duplicate = FALSE;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pdbentry = (DBENTRY *)popFirstTemp();
|
pdbentry = (DBENTRY *)popFirstTemp();
|
||||||
if(ellCount(&tempList))
|
if (ellCount(&tempList))
|
||||||
yyerrorAbort("dbRecordBody: tempList not empty");
|
yyerrorAbort("dbRecordBody: tempList not empty");
|
||||||
dbFreeEntry(pdbentry);
|
dbFreeEntry(pdbentry);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ static int generalTimeGetEventPriority(epicsTimeStamp *pDest, int eventNumber,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (epicsTimeGreaterThanEqual(pDest,
|
if (epicsTimeGreaterThanEqual(&ts,
|
||||||
>Pvt.eventTime[eventNumber])) {
|
>Pvt.eventTime[eventNumber])) {
|
||||||
*pDest = ts;
|
*pDest = ts;
|
||||||
gtPvt.eventTime[eventNumber] = ts;
|
gtPvt.eventTime[eventNumber] = ts;
|
||||||
@@ -279,7 +279,6 @@ static int generalTimeGetEventPriority(epicsTimeStamp *pDest, int eventNumber,
|
|||||||
key = epicsInterruptLock();
|
key = epicsInterruptLock();
|
||||||
gtPvt.ErrorCounts++;
|
gtPvt.ErrorCounts++;
|
||||||
epicsInterruptUnlock(key);
|
epicsInterruptUnlock(key);
|
||||||
}
|
|
||||||
|
|
||||||
IFDEBUG(10) {
|
IFDEBUG(10) {
|
||||||
char last[40], buff[40];
|
char last[40], buff[40];
|
||||||
@@ -291,6 +290,7 @@ static int generalTimeGetEventPriority(epicsTimeStamp *pDest, int eventNumber,
|
|||||||
" %s, using %s instead\n",
|
" %s, using %s instead\n",
|
||||||
ptp->name, buff, last);
|
ptp->name, buff, last);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,8 +48,10 @@ static epicsThreadOnceId onceId = EPICS_THREAD_ONCE_INIT;
|
|||||||
/* Forward references */
|
/* Forward references */
|
||||||
|
|
||||||
static int ClockTimeGetCurrent(epicsTimeStamp *pDest);
|
static int ClockTimeGetCurrent(epicsTimeStamp *pDest);
|
||||||
static void ClockTimeSync(void *dummy);
|
|
||||||
|
|
||||||
|
#if defined(vxWorks) || defined(__rtems__)
|
||||||
|
static void ClockTimeSync(void *dummy);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ClockTime_Report iocsh command */
|
/* ClockTime_Report iocsh command */
|
||||||
static const iocshArg ReportArg0 = { "interest_level", iocshArgArgv};
|
static const iocshArg ReportArg0 = { "interest_level", iocshArgArgv};
|
||||||
@@ -77,12 +79,14 @@ static void ClockTime_InitOnce(void *psync)
|
|||||||
ClockTimePvt.lock = epicsMutexCreate();
|
ClockTimePvt.lock = epicsMutexCreate();
|
||||||
ClockTimePvt.ClockTimeSyncInterval = 1.0; /* First sync */
|
ClockTimePvt.ClockTimeSyncInterval = 1.0; /* First sync */
|
||||||
|
|
||||||
|
#if defined(vxWorks) || defined(__rtems__)
|
||||||
if (ClockTimePvt.synchronize) {
|
if (ClockTimePvt.synchronize) {
|
||||||
/* Start the sync thread */
|
/* Start the sync thread */
|
||||||
epicsThreadCreate("ClockTimeSync", epicsThreadPriorityHigh,
|
epicsThreadCreate("ClockTimeSync", epicsThreadPriorityHigh,
|
||||||
epicsThreadGetStackSize(epicsThreadStackSmall),
|
epicsThreadGetStackSize(epicsThreadStackSmall),
|
||||||
ClockTimeSync, NULL);
|
ClockTimeSync, NULL);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
epicsAtExit(ClockTime_Shutdown, NULL);
|
epicsAtExit(ClockTime_Shutdown, NULL);
|
||||||
|
|
||||||
@@ -113,6 +117,7 @@ void ClockTime_Shutdown(void *dummy)
|
|||||||
|
|
||||||
/* Synchronization thread */
|
/* Synchronization thread */
|
||||||
|
|
||||||
|
#if defined(vxWorks) || defined(__rtems__)
|
||||||
static void ClockTimeSync(void *dummy)
|
static void ClockTimeSync(void *dummy)
|
||||||
{
|
{
|
||||||
taskwdInsert(0, NULL, NULL);
|
taskwdInsert(0, NULL, NULL);
|
||||||
@@ -148,6 +153,7 @@ static void ClockTimeSync(void *dummy)
|
|||||||
ClockTimePvt.synchronized = 0;
|
ClockTimePvt.synchronized = 0;
|
||||||
taskwdRemove(0);
|
taskwdRemove(0);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Time Provider Routine */
|
/* Time Provider Routine */
|
||||||
@@ -159,6 +165,7 @@ static int ClockTimeGetCurrent(epicsTimeStamp *pDest)
|
|||||||
/* If a Hi-Res clock is available and works, use it */
|
/* If a Hi-Res clock is available and works, use it */
|
||||||
#ifdef CLOCK_REALTIME_HR
|
#ifdef CLOCK_REALTIME_HR
|
||||||
clock_gettime(CLOCK_REALTIME_HR, &clockNow) &&
|
clock_gettime(CLOCK_REALTIME_HR, &clockNow) &&
|
||||||
|
/* Note: Uses the lo-res clock below if the above call fails */
|
||||||
#endif
|
#endif
|
||||||
clock_gettime(CLOCK_REALTIME, &clockNow);
|
clock_gettime(CLOCK_REALTIME, &clockNow);
|
||||||
|
|
||||||
@@ -166,9 +173,15 @@ static int ClockTimeGetCurrent(epicsTimeStamp *pDest)
|
|||||||
clockNow.tv_sec < POSIX_TIME_AT_EPICS_EPOCH) {
|
clockNow.tv_sec < POSIX_TIME_AT_EPICS_EPOCH) {
|
||||||
clockNow.tv_sec = POSIX_TIME_AT_EPICS_EPOCH + 86400;
|
clockNow.tv_sec = POSIX_TIME_AT_EPICS_EPOCH + 86400;
|
||||||
clockNow.tv_nsec = 0;
|
clockNow.tv_nsec = 0;
|
||||||
|
|
||||||
|
#if defined(vxWorks) || defined(__rtems__)
|
||||||
clock_settime(CLOCK_REALTIME, &clockNow);
|
clock_settime(CLOCK_REALTIME, &clockNow);
|
||||||
errlogPrintf("WARNING: OS Clock time was read before being set.\n"
|
errlogPrintf("WARNING: OS Clock time was read before being set.\n"
|
||||||
"Using 1990-01-02 00:00:00.000000 UTC\n");
|
"Using 1990-01-02 00:00:00.000000 UTC\n");
|
||||||
|
#else
|
||||||
|
errlogPrintf("WARNING: OS Clock pre-dates the EPICS epoch!\n"
|
||||||
|
"Using 1990-01-02 00:00:00.000000 UTC\n");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
epicsTimeFromTimespec(pDest, &clockNow);
|
epicsTimeFromTimespec(pDest, &clockNow);
|
||||||
|
|||||||
@@ -198,8 +198,8 @@ static long get_alarm_double(DBADDR *paddr,struct dbr_alDouble *pad)
|
|||||||
|
|
||||||
static void checkAlarms(xxxRecord *prec)
|
static void checkAlarms(xxxRecord *prec)
|
||||||
{
|
{
|
||||||
double val;
|
double val, hyst, lalm;
|
||||||
float hyst, lalm, hihi, high, low, lolo;
|
float hihi, high, low, lolo;
|
||||||
unsigned short hhsv, llsv, hsv, lsv;
|
unsigned short hhsv, llsv, hsv, lsv;
|
||||||
|
|
||||||
if(prec->udf == TRUE ){
|
if(prec->udf == TRUE ){
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ LIB_SRCS += miscIocRegister.c
|
|||||||
LIB_SRCS += dlload.c
|
LIB_SRCS += dlload.c
|
||||||
LIB_SRCS += iocshRegisterCommon.c
|
LIB_SRCS += iocshRegisterCommon.c
|
||||||
|
|
||||||
|
miscIocRegister_CFLAGS_iOS = -DSYSTEM_UNAVAILABLE
|
||||||
|
|
||||||
LIBRARY_IOC = miscIoc
|
LIBRARY_IOC = miscIoc
|
||||||
|
|
||||||
|
|||||||
@@ -16,8 +16,6 @@
|
|||||||
#define epicsExportSharedSymbols
|
#define epicsExportSharedSymbols
|
||||||
#include "epicsRelease.h"
|
#include "epicsRelease.h"
|
||||||
|
|
||||||
static const char id[] = "@(#) " EPICS_VERSION_STRING ", Misc. Utilities Library" __DATE__;
|
|
||||||
|
|
||||||
epicsShareFunc int epicsShareAPI coreRelease(void)
|
epicsShareFunc int epicsShareAPI coreRelease(void)
|
||||||
{
|
{
|
||||||
printf ( "############################################################################\n" );
|
printf ( "############################################################################\n" );
|
||||||
|
|||||||
@@ -66,10 +66,12 @@ void epicsShareAPI miscIocRegister(void)
|
|||||||
|
|
||||||
/* system -- escape to system command interpreter.
|
/* system -- escape to system command interpreter.
|
||||||
*
|
*
|
||||||
* Disabled by default, for security reasons. To enable this command, add
|
* Disabled by default for security reasons, not available on all OSs.
|
||||||
|
* To enable this command, add
|
||||||
* registrar(iocshSystemCommand)
|
* registrar(iocshSystemCommand)
|
||||||
* to an application dbd file.
|
* to an application dbd file, or include system.dbd
|
||||||
*/
|
*/
|
||||||
|
#ifndef SYSTEM_UNAVAILABLE
|
||||||
static const iocshArg systemArg0 = { "command string",iocshArgString};
|
static const iocshArg systemArg0 = { "command string",iocshArgString};
|
||||||
static const iocshArg * const systemArgs[] = {&systemArg0};
|
static const iocshArg * const systemArgs[] = {&systemArg0};
|
||||||
static const iocshFuncDef systemFuncDef = {"system",1,systemArgs};
|
static const iocshFuncDef systemFuncDef = {"system",1,systemArgs};
|
||||||
@@ -77,12 +79,15 @@ static void systemCallFunc(const iocshArgBuf *args)
|
|||||||
{
|
{
|
||||||
system(args[0].sval);
|
system(args[0].sval);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void iocshSystemCommand(void)
|
static void iocshSystemCommand(void)
|
||||||
{
|
{
|
||||||
|
#ifndef SYSTEM_UNAVAILABLE
|
||||||
if (system(NULL))
|
if (system(NULL))
|
||||||
iocshRegister(&systemFuncDef, systemCallFunc);
|
iocshRegister(&systemFuncDef, systemCallFunc);
|
||||||
else
|
else
|
||||||
|
#endif
|
||||||
errlogPrintf ("Can't register 'system' command -- no command interpreter available.\n");
|
errlogPrintf ("Can't register 'system' command -- no command interpreter available.\n");
|
||||||
}
|
}
|
||||||
epicsExportRegistrar(iocshSystemCommand);
|
epicsExportRegistrar(iocshSystemCommand);
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
|
|
||||||
#include "dbDefs.h"
|
#include "dbDefs.h"
|
||||||
#include "epicsPrint.h"
|
#include "epicsPrint.h"
|
||||||
|
#include "epicsMath.h"
|
||||||
#include "alarm.h"
|
#include "alarm.h"
|
||||||
#include "dbAccess.h"
|
#include "dbAccess.h"
|
||||||
#include "dbEvent.h"
|
#include "dbEvent.h"
|
||||||
@@ -201,10 +202,10 @@ static long get_alarm_double(DBADDR *paddr, struct dbr_alDouble *pad)
|
|||||||
longinRecord *prec=(longinRecord *)paddr->precord;
|
longinRecord *prec=(longinRecord *)paddr->precord;
|
||||||
|
|
||||||
if(paddr->pfield==(void *)&prec->val){
|
if(paddr->pfield==(void *)&prec->val){
|
||||||
pad->upper_alarm_limit = prec->hihi;
|
pad->upper_alarm_limit = prec->hhsv ? prec->hihi : epicsNAN;
|
||||||
pad->upper_warning_limit = prec->high;
|
pad->upper_warning_limit = prec->hsv ? prec->high : epicsNAN;
|
||||||
pad->lower_warning_limit = prec->low;
|
pad->lower_warning_limit = prec->lsv ? prec->low : epicsNAN;
|
||||||
pad->lower_alarm_limit = prec->lolo;
|
pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN;
|
||||||
} else recGblGetAlarmDouble(paddr,pad);
|
} else recGblGetAlarmDouble(paddr,pad);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "dbDefs.h"
|
#include "dbDefs.h"
|
||||||
#include "epicsPrint.h"
|
#include "epicsPrint.h"
|
||||||
|
#include "epicsMath.h"
|
||||||
#include "alarm.h"
|
#include "alarm.h"
|
||||||
#include "dbAccess.h"
|
#include "dbAccess.h"
|
||||||
#include "dbEvent.h"
|
#include "dbEvent.h"
|
||||||
@@ -242,10 +243,10 @@ static long get_alarm_double(DBADDR *paddr,struct dbr_alDouble *pad)
|
|||||||
int fieldIndex = dbGetFieldIndex(paddr);
|
int fieldIndex = dbGetFieldIndex(paddr);
|
||||||
|
|
||||||
if(fieldIndex == longoutRecordVAL) {
|
if(fieldIndex == longoutRecordVAL) {
|
||||||
pad->upper_alarm_limit = prec->hihi;
|
pad->upper_alarm_limit = prec->hhsv ? prec->hihi : epicsNAN;
|
||||||
pad->upper_warning_limit = prec->high;
|
pad->upper_warning_limit = prec->hsv ? prec->high : epicsNAN;
|
||||||
pad->lower_warning_limit = prec->low;
|
pad->lower_warning_limit = prec->lsv ? prec->low : epicsNAN;
|
||||||
pad->lower_alarm_limit = prec->lolo;
|
pad->lower_alarm_limit = prec->llsv ? prec->lolo : epicsNAN;
|
||||||
} else recGblGetAlarmDouble(paddr,pad);
|
} else recGblGetAlarmDouble(paddr,pad);
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ void rsrv_online_notify_task(void *pParm)
|
|||||||
char * pStr;
|
char * pStr;
|
||||||
int autoBeaconAddr;
|
int autoBeaconAddr;
|
||||||
ELLLIST autoAddrList;
|
ELLLIST autoAddrList;
|
||||||
char buf[16];
|
char buf[22];
|
||||||
unsigned priorityOfUDP;
|
unsigned priorityOfUDP;
|
||||||
epicsThreadBooleanStatus tbs;
|
epicsThreadBooleanStatus tbs;
|
||||||
epicsThreadId tid;
|
epicsThreadId tid;
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
#!/usr/bin/env perl
|
||||||
if $running_under_some_shell;
|
|
||||||
#*************************************************************************
|
#*************************************************************************
|
||||||
# Copyright (c) 2010 UChicago Argonne LLC, as Operator of Argonne
|
# Copyright (c) 2010 UChicago Argonne LLC, as Operator of Argonne
|
||||||
# National Laboratory.
|
# National Laboratory.
|
||||||
|
|||||||
55
src/tools/EpicsHostArch.pl
Normal file
55
src/tools/EpicsHostArch.pl
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
#*************************************************************************
|
||||||
|
# Copyright (c) 2018 UChicago Argonne LLC, as Operator of Argonne
|
||||||
|
# National Laboratory.
|
||||||
|
# EPICS BASE is distributed subject to a Software License Agreement found
|
||||||
|
# in file LICENSE that is included with this distribution.
|
||||||
|
#*************************************************************************
|
||||||
|
|
||||||
|
# Returns an architecture name for EPICS_HOST_ARCH that should be
|
||||||
|
# appropriate for the CPU that this version of Perl was built for.
|
||||||
|
# Any arguments to the program will be appended with separator '-'
|
||||||
|
# to allow flags like -gnu -debug and/or -static to be added.
|
||||||
|
|
||||||
|
# Before Base has been built, use a command like this:
|
||||||
|
# bash$ export EPICS_HOST_ARCH=`perl src/tools/EpicsHostArch.pl`
|
||||||
|
#
|
||||||
|
# If Base is already built, use
|
||||||
|
# tcsh% setenv EPICS_HOST_ARCH `perl base/lib/perl/EpicsHostArch.pl`
|
||||||
|
|
||||||
|
# If your architecture is not recognized by this script, please send
|
||||||
|
# the output from running 'perl --version' to the EPICS tech-talk
|
||||||
|
# mailing list to have it added.
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
|
||||||
|
use Config;
|
||||||
|
use POSIX;
|
||||||
|
|
||||||
|
print join('-', HostArch(), @ARGV), "\n";
|
||||||
|
|
||||||
|
sub HostArch {
|
||||||
|
my $arch = $Config{archname};
|
||||||
|
for ($arch) {
|
||||||
|
return 'linux-x86_64' if m/^x86_64-linux/;
|
||||||
|
return 'linux-x86' if m/^i[3-6]86-linux/;
|
||||||
|
return 'linux-arm' if m/^arm-linux/;
|
||||||
|
return 'windows-x64' if m/^MSWin32-x64/;
|
||||||
|
return 'win32-x86' if m/^MSWin32-x86/;
|
||||||
|
return "cygwin-x86_64" if m/^x86_64-cygwin/;
|
||||||
|
return "cygwin-x86" if m/^i[3-6]86-cygwin/;
|
||||||
|
return 'solaris-sparc' if m/^sun4-solaris/;
|
||||||
|
return 'solaris-x86' if m/^i86pc-solaris/;
|
||||||
|
|
||||||
|
my ($kernel, $hostname, $release, $version, $cpu) = uname;
|
||||||
|
if (m/^darwin/) {
|
||||||
|
for ($cpu) {
|
||||||
|
return 'darwin-x86' if m/^(i386|x86_64)/;
|
||||||
|
return 'darwin-ppc' if m/Power Macintosh/;
|
||||||
|
}
|
||||||
|
die "$0: macOS CPU type '$cpu' not recognized\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
die "$0: Architecture '$arch' not recognized\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,9 @@ PERL_MODULES += EPICS/Path.pm
|
|||||||
PERL_MODULES += EPICS/Release.pm
|
PERL_MODULES += EPICS/Release.pm
|
||||||
PERL_MODULES += EPICS/Getopts.pm
|
PERL_MODULES += EPICS/Getopts.pm
|
||||||
|
|
||||||
|
# This goes into lib/perl, not bin/<host>
|
||||||
|
PERL_MODULES += EpicsHostArch.pl
|
||||||
|
|
||||||
PERL_SCRIPTS += convertRelease.pl
|
PERL_SCRIPTS += convertRelease.pl
|
||||||
PERL_SCRIPTS += cvsclean.pl
|
PERL_SCRIPTS += cvsclean.pl
|
||||||
PERL_SCRIPTS += dos2unix.pl
|
PERL_SCRIPTS += dos2unix.pl
|
||||||
@@ -28,6 +31,7 @@ PERL_SCRIPTS += makeMakefile.pl
|
|||||||
PERL_SCRIPTS += makeTestfile.pl
|
PERL_SCRIPTS += makeTestfile.pl
|
||||||
PERL_SCRIPTS += mkmf.pl
|
PERL_SCRIPTS += mkmf.pl
|
||||||
PERL_SCRIPTS += munch.pl
|
PERL_SCRIPTS += munch.pl
|
||||||
|
PERL_SCRIPTS += podToHtml.pl
|
||||||
PERL_SCRIPTS += replaceVAR.pl
|
PERL_SCRIPTS += replaceVAR.pl
|
||||||
PERL_SCRIPTS += tap-to-junit-xml.pl
|
PERL_SCRIPTS += tap-to-junit-xml.pl
|
||||||
PERL_SCRIPTS += useManifestTool.pl
|
PERL_SCRIPTS += useManifestTool.pl
|
||||||
|
|||||||
@@ -21,8 +21,7 @@ use Getopt::Std;
|
|||||||
use EPICS::Path;
|
use EPICS::Path;
|
||||||
use EPICS::Release;
|
use EPICS::Release;
|
||||||
|
|
||||||
use vars qw($arch $top $iocroot $root);
|
our ($arch, $top, $iocroot, $root);
|
||||||
|
|
||||||
our ($opt_a, $opt_t, $opt_T);
|
our ($opt_a, $opt_t, $opt_T);
|
||||||
|
|
||||||
$Getopt::Std::OUTPUT_HELP_VERSION = 1;
|
$Getopt::Std::OUTPUT_HELP_VERSION = 1;
|
||||||
|
|||||||
45
src/tools/podToHtml.pl
Normal file
45
src/tools/podToHtml.pl
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
#!/usr/bin/env perl
|
||||||
|
#*************************************************************************
|
||||||
|
# Copyright (c) 2013 UChicago Argonne LLC, as Operator of Argonne
|
||||||
|
# National Laboratory.
|
||||||
|
# EPICS BASE is distributed subject to a Software License Agreement found
|
||||||
|
# in file LICENSE that is included with this distribution.
|
||||||
|
#*************************************************************************
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
use Getopt::Std;
|
||||||
|
use Pod::Simple::HTML;
|
||||||
|
|
||||||
|
our ($opt_o);
|
||||||
|
|
||||||
|
$Getopt::Std::OUTPUT_HELP_VERSION = 1;
|
||||||
|
&HELP_MESSAGE if !getopts('o:') || @ARGV != 1;
|
||||||
|
|
||||||
|
my $infile = shift @ARGV;
|
||||||
|
|
||||||
|
if (!$opt_o) {
|
||||||
|
($opt_o = $infile) =~ s/\. \w+ $/.html/x;
|
||||||
|
$opt_o =~ s/^.*\///;
|
||||||
|
}
|
||||||
|
|
||||||
|
open my $out, '>', $opt_o or
|
||||||
|
die "Can't create $opt_o: $!\n";
|
||||||
|
|
||||||
|
my $podHtml = Pod::Simple::HTML->new();
|
||||||
|
|
||||||
|
$podHtml->html_css('style.css');
|
||||||
|
$podHtml->perldoc_url_prefix('');
|
||||||
|
$podHtml->perldoc_url_postfix('.html');
|
||||||
|
$podHtml->set_source($infile);
|
||||||
|
$podHtml->output_string(\my $html);
|
||||||
|
$podHtml->run;
|
||||||
|
|
||||||
|
print $out $html;
|
||||||
|
close $out;
|
||||||
|
|
||||||
|
sub HELP_MESSAGE {
|
||||||
|
print STDERR "Usage: podToHtml.pl [-o file.html] file.pod\n";
|
||||||
|
exit 2;
|
||||||
|
}
|
||||||
@@ -347,11 +347,6 @@ static int openLogFile (struct ioc_log_server *pserver)
|
|||||||
{
|
{
|
||||||
enum TF_RETURN ret;
|
enum TF_RETURN ret;
|
||||||
|
|
||||||
if (ioc_log_file_limit==0u) {
|
|
||||||
pserver->poutfile = stderr;
|
|
||||||
return IOCLS_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pserver->poutfile && pserver->poutfile != stderr){
|
if (pserver->poutfile && pserver->poutfile != stderr){
|
||||||
fclose (pserver->poutfile);
|
fclose (pserver->poutfile);
|
||||||
pserver->poutfile = NULL;
|
pserver->poutfile = NULL;
|
||||||
@@ -627,7 +622,7 @@ static void writeMessagesToLog (struct iocLogClient *pclient)
|
|||||||
strlen(pclient->ascii_time) + nchar + 3u;
|
strlen(pclient->ascii_time) + nchar + 3u;
|
||||||
assert (nTotChar <= INT_MAX);
|
assert (nTotChar <= INT_MAX);
|
||||||
ntci = (int) nTotChar;
|
ntci = (int) nTotChar;
|
||||||
if ( pclient->pserver->filePos+ntci >= pclient->pserver->max_file_size ) {
|
if ( pclient->pserver->max_file_size && pclient->pserver->filePos+ntci >= pclient->pserver->max_file_size ) {
|
||||||
if ( pclient->pserver->max_file_size >= pclient->pserver->filePos ) {
|
if ( pclient->pserver->max_file_size >= pclient->pserver->filePos ) {
|
||||||
unsigned nPadChar;
|
unsigned nPadChar;
|
||||||
/*
|
/*
|
||||||
@@ -771,7 +766,7 @@ static int getConfig(void)
|
|||||||
&EPICS_IOC_LOG_FILE_LIMIT,
|
&EPICS_IOC_LOG_FILE_LIMIT,
|
||||||
&ioc_log_file_limit);
|
&ioc_log_file_limit);
|
||||||
if(status>=0){
|
if(status>=0){
|
||||||
if (ioc_log_file_limit<=0) {
|
if (ioc_log_file_limit < 0) {
|
||||||
envFailureNotify (&EPICS_IOC_LOG_FILE_LIMIT);
|
envFailureNotify (&EPICS_IOC_LOG_FILE_LIMIT);
|
||||||
return IOCLS_ERROR;
|
return IOCLS_ERROR;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,84 +1,21 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
#*************************************************************************
|
# Script to find and run the Perl EpicsHostArch.pl script.
|
||||||
# Copyright (c) 2011 UChicago Argonne LLC, as Operator of Argonne
|
|
||||||
# National Laboratory.
|
|
||||||
# Copyright (c) 2002 The Regents of the University of California, as
|
|
||||||
# Operator of Los Alamos National Laboratory.
|
|
||||||
# EPICS BASE is distributed subject to a Software License Agreement found
|
|
||||||
# in file LICENSE that is included with this distribution.
|
|
||||||
#*************************************************************************
|
|
||||||
#
|
|
||||||
# EpicsHostArch - returns the Epics host architecture suitable
|
|
||||||
# for assigning to the EPICS_HOST_ARCH variable
|
|
||||||
|
|
||||||
if [ "x${1}" != "x" ]
|
# This script is provided for backwards-compatibility only and may be
|
||||||
then
|
# dropped from future releases of Base. Please adjust callers to run
|
||||||
suffix="-"${1}
|
# the Perl version directly as this startup directory isn't copied to
|
||||||
else
|
# INSTALL_LOCATION by the EPICS build system.
|
||||||
suffix=""
|
|
||||||
fi
|
|
||||||
|
|
||||||
sysname=`uname`
|
EHA=EpicsHostArch.pl
|
||||||
|
|
||||||
case $sysname in
|
cd "$(dirname "$0")/.."
|
||||||
Linux )
|
|
||||||
os=linux
|
|
||||||
cpu=`uname -m`
|
|
||||||
case $cpu in
|
|
||||||
i386 | i486 | i586 | i686 )
|
|
||||||
cpu=x86 ;;
|
|
||||||
x86_64 )
|
|
||||||
;; # $cpu is correct
|
|
||||||
armv6l | armv7l )
|
|
||||||
cpu=arm ;;
|
|
||||||
esac
|
|
||||||
echo ${os}-${cpu}${suffix}
|
|
||||||
;;
|
|
||||||
Darwin )
|
|
||||||
os=darwin
|
|
||||||
cpu=`uname -m`
|
|
||||||
case $cpu in
|
|
||||||
"Power Macintosh")
|
|
||||||
cpu=ppc ;;
|
|
||||||
i386 | x86_64 )
|
|
||||||
cpu=x86 ;;
|
|
||||||
esac
|
|
||||||
echo ${os}-${cpu}${suffix}
|
|
||||||
;;
|
|
||||||
SunOS )
|
|
||||||
version=`uname -r | sed '1s/^\([0-9]*\).*$/\1/'`
|
|
||||||
if [ ${version} -ge 5 ]; then
|
|
||||||
os=solaris
|
|
||||||
else
|
|
||||||
os=sun4
|
|
||||||
fi
|
|
||||||
cpu=`uname -m`
|
|
||||||
case $cpu in
|
|
||||||
sun4*)
|
|
||||||
cpu=sparc
|
|
||||||
;;
|
|
||||||
i86pc)
|
|
||||||
cpu=x86
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo ${os}-${cpu}${suffix}
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
sysname=`uname -o`
|
|
||||||
case $sysname in
|
|
||||||
Cygwin )
|
|
||||||
os=cygwin
|
|
||||||
cpu=`uname -m`
|
|
||||||
case $cpu in i386 | i486 | i586 | i686 )
|
|
||||||
cpu=x86
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo ${os}-${cpu}${suffix}
|
|
||||||
;;
|
|
||||||
* )
|
|
||||||
echo unsupported
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
|
# Perl script will be installed into lib/perl
|
||||||
|
[ -f lib/perl/$EHA ] && exec perl lib/perl/$EHA "$@"
|
||||||
|
|
||||||
|
# If Base hasn't been built yet, use the source Luke
|
||||||
|
[ -f src/tools/$EHA ] && exec perl src/tools/$EHA "$@"
|
||||||
|
|
||||||
|
# Die with an error message
|
||||||
|
echo "$0: Can't find $EHA" >&2
|
||||||
|
exit 1
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
|
||||||
if $running_under_some_shell; # EpicsHostArch.pl
|
|
||||||
#*************************************************************************
|
|
||||||
# Copyright (c) 2011 UChicago Argonne LLC, as Operator of Argonne
|
|
||||||
# National Laboratory.
|
|
||||||
# Copyright (c) 2002 The Regents of the University of California, as
|
|
||||||
# Operator of Los Alamos National Laboratory.
|
|
||||||
# EPICS BASE is distributed subject to a Software License Agreement found
|
|
||||||
# in file LICENSE that is included with this distribution.
|
|
||||||
#*************************************************************************
|
|
||||||
|
|
||||||
# Returns the Epics host architecture suitable
|
|
||||||
# for assigning to the EPICS_HOST_ARCH variable
|
|
||||||
|
|
||||||
use Config;
|
|
||||||
use POSIX;
|
|
||||||
|
|
||||||
$suffix="";
|
|
||||||
$suffix="-".$ARGV[0] if ($ARGV[0] ne "");
|
|
||||||
|
|
||||||
$EpicsHostArch = GetEpicsHostArch();
|
|
||||||
print "$EpicsHostArch$suffix";
|
|
||||||
|
|
||||||
sub GetEpicsHostArch { # no args
|
|
||||||
$arch=$Config{'archname'};
|
|
||||||
if ($arch =~ /sun4-solaris/) { return "solaris-sparc";
|
|
||||||
} elsif ($arch =~ m/i86pc-solaris/) { return "solaris-x86";
|
|
||||||
} elsif ($arch =~ m/i[3-6]86-linux/){ return "linux-x86";
|
|
||||||
} elsif ($arch =~ m/x86_64-linux/) { return "linux-x86_64";
|
|
||||||
} elsif ($arch =~ m/arm-linux/) { return "linux-arm";
|
|
||||||
} elsif ($arch =~ m/MSWin32-x86/) { return "win32-x86";
|
|
||||||
} elsif ($arch =~ m/MSWin32-x64/) { return "windows-x64";
|
|
||||||
} elsif ($arch =~ m/cygwin/) {
|
|
||||||
my($kernel, $hostname, $release, $version, $cpu) = POSIX::uname();
|
|
||||||
if ($cpu =~ m/x86_64/) { return "cygwin-x86_64"; }
|
|
||||||
return "cygwin-x86";
|
|
||||||
} elsif ($arch =~ m/darwin/) {
|
|
||||||
my($kernel, $hostname, $release, $version, $cpu) = POSIX::uname();
|
|
||||||
if ($cpu =~ m/Power Macintosh/) { return "darwin-ppc"; }
|
|
||||||
elsif ($cpu =~ m/i386/) { return "darwin-x86"; }
|
|
||||||
elsif ($cpu =~ m/x86_64/) { return "darwin-x86"; }
|
|
||||||
else { return "unsupported"; }
|
|
||||||
} else { return "unsupported"; }
|
|
||||||
}
|
|
||||||
|
|
||||||
#EOF EpicsHostArch.pl
|
|
||||||
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
#!/bin/csh -f
|
|
||||||
#*************************************************************************
|
|
||||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
|
||||||
# National Laboratory.
|
|
||||||
# Copyright (c) 2002 The Regents of the University of California, as
|
|
||||||
# Operator of Los Alamos National Laboratory.
|
|
||||||
# EPICS BASE Versions 3.13.7
|
|
||||||
# and higher are distributed subject to a Software License Agreement found
|
|
||||||
# in file LICENSE that is included with this distribution.
|
|
||||||
#*************************************************************************
|
|
||||||
# Site-specific EPICS environment settings
|
|
||||||
#
|
|
||||||
# sites should modify these definitions
|
|
||||||
|
|
||||||
# Location of epics base
|
|
||||||
if ( ! $?EPICS_BASE ) then
|
|
||||||
set EPICS_BASE=/usr/local/epics/base
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Location of epics extensions
|
|
||||||
if ( ! $?EPICS_EXTENSIONS ) then
|
|
||||||
setenv EPICS_EXTENSIONS /usr/local/epics/extensions
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Postscript printer definition needed by some extensions (eg medm, dp, dm, ...)
|
|
||||||
if ( ! $?PSPRINTTER ) then
|
|
||||||
setenv PSPRINTER lp
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Needed only by medm extension
|
|
||||||
#setenv EPICS_DISPLAY_PATH
|
|
||||||
# Needed only by medm extension
|
|
||||||
setenv BROWSER firefox
|
|
||||||
|
|
||||||
# Needed only by orbitscreen extension
|
|
||||||
if ( ! $?ORBITSCREENHOME ) then
|
|
||||||
setenv ORBITSCREENHOME $EPICS_EXTENSIONS/src/orbitscreen
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Needed only by adt extension
|
|
||||||
if ( ! $?ADTHOME ) then
|
|
||||||
setenv ADTHOME /usr/local/oag/apps/src/appconfig/adt
|
|
||||||
echo $ADTHOME
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Needed only by ar extension (archiver)
|
|
||||||
setenv EPICS_AR_PORT 7002
|
|
||||||
|
|
||||||
# Needed for java extensions
|
|
||||||
if ( $?CLASSPATH ) then
|
|
||||||
setenv CLASSPATH "${CLASSPATH}:${EPICS_EXTENSIONS}/javalib"
|
|
||||||
else
|
|
||||||
setenv CLASSPATH "${EPICS_EXTENSIONS}/javalib"
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Allow private versions of extensions without a bin subdir
|
|
||||||
if ( $?EPICS_EXTENSIONS_PVT ) then
|
|
||||||
set path = ( $path $EPICS_EXTENSIONS_PVT)
|
|
||||||
endif
|
|
||||||
|
|
||||||
##################################################################
|
|
||||||
|
|
||||||
# Start of set R3.14 environment variables
|
|
||||||
|
|
||||||
setenv EPICS_HOST_ARCH `$EPICS_BASE/startup/EpicsHostArch.pl`
|
|
||||||
|
|
||||||
# Allow private versions of base
|
|
||||||
if ( $?EPICS_BASE_PVT ) then
|
|
||||||
if ( -e $EPICS_BASE_PVT/bin/$EPICS_HOST_ARCH ) then
|
|
||||||
set path = ( $path $EPICS_BASE_PVT/bin/$EPICS_HOST_ARCH)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Allow private versions of extensions
|
|
||||||
if ( $?EPICS_EXTENSIONS_PVT ) then
|
|
||||||
if ( -e $EPICS_EXTENSIONS_PVT/bin/$EPICS_HOST_ARCH ) then
|
|
||||||
set path = ( $path $EPICS_EXTENSIONS_PVT/bin/$EPICS_HOST_ARCH)
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
set path = ( $path $EPICS_EXTENSIONS/bin/$EPICS_HOST_ARCH )
|
|
||||||
|
|
||||||
# End of set R3.14 environment variables
|
|
||||||
##################################################################
|
|
||||||
|
|
||||||
|
|
||||||
## Start of set pre R3.14 environment variables
|
|
||||||
#
|
|
||||||
## Time service:
|
|
||||||
## EPICS_TS_MIN_WEST the local time difference from GMT.
|
|
||||||
#setenv EPICS_TS_MIN_WEST 360
|
|
||||||
#
|
|
||||||
#if ( -e /usr/local/etc/setup/HostArch.pl ) then
|
|
||||||
# setenv HOST_ARCH `/usr/local/etc/setup/HostArch.pl`
|
|
||||||
#else
|
|
||||||
# setenv HOST_ARCH `/usr/local/epics/startup/HostArch.pl`
|
|
||||||
#endif
|
|
||||||
#
|
|
||||||
## Allow private versions of extensions
|
|
||||||
#if ( $?EPICS_EXTENSIONS_PVT ) then
|
|
||||||
# if ( -e $EPICS_EXTENSIONS_PVT/bin/$HOST_ARCH ) then
|
|
||||||
# set path = ( $path $EPICS_EXTENSIONS_PVT/bin/$HOST_ARCH)
|
|
||||||
# endif
|
|
||||||
# # Needed if shared extension libraries are built
|
|
||||||
# if ( -e $EPICS_EXTENSIONS_PVT/lib/$HOST_ARCH ) then
|
|
||||||
# if ( $?LD_LIBRARY_PATH ) then
|
|
||||||
# setenv LD_LIBRARY_PATH "${LD_LIBRARY_PATH}:${EPICS_EXTENSIONS_PVT}/lib/${HOST_ARCH}"
|
|
||||||
# else
|
|
||||||
# setenv LD_LIBRARY_PATH "${EPICS_EXTENSIONS_PVT}/lib/${HOST_ARCH}"
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
#
|
|
||||||
#set path = ( $path $EPICS_EXTENSIONS/bin/$HOST_ARCH )
|
|
||||||
## Needed if shared extension libraries are built
|
|
||||||
#setenv LD_LIBRARY_PATH "${LD_LIBRARY_PATH}:${EPICS_EXTENSIONS}/lib/${HOST_ARCH}"
|
|
||||||
|
|
||||||
# End of set pre R3.14 environment variables
|
|
||||||
##################################################################
|
|
||||||
@@ -1,118 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
#*************************************************************************
|
|
||||||
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
|
||||||
# National Laboratory.
|
|
||||||
# Copyright (c) 2002 The Regents of the University of California, as
|
|
||||||
# Operator of Los Alamos National Laboratory.
|
|
||||||
# EPICS BASE Versions 3.13.7
|
|
||||||
# and higher are distributed subject to a Software License Agreement found
|
|
||||||
# in file LICENSE that is included with this distribution.
|
|
||||||
#*************************************************************************
|
|
||||||
# Site-specific EPICS environment settings
|
|
||||||
#
|
|
||||||
# sites should modify these definitions
|
|
||||||
|
|
||||||
# Location of epics base
|
|
||||||
if [ -z "${MY_EPICS_BASE}" ] ; then
|
|
||||||
MY_EPICS_BASE=/usr/local/epics/base
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Location of epics extensions (medm, msi, etc.)
|
|
||||||
if [ -z "${EPICS_EXTENSIONS}" ] ; then
|
|
||||||
EPICS_EXTENSIONS=/usr/local/epics/extensions
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Postscript printer definition needed by some extensions (eg medm, dp, dm, ...)
|
|
||||||
if [ -z "${PSPRINTER}" ] ; then
|
|
||||||
export PSPRINTER=lp
|
|
||||||
fi
|
|
||||||
|
|
||||||
#Needed only by the idl and ezcaIDL extensions.
|
|
||||||
#export EPICS_EXTENSIONS
|
|
||||||
|
|
||||||
# Needed only by medm extension
|
|
||||||
#export EPICS_DISPLAY_PATH=/path/to/adl/files
|
|
||||||
export BROWSER=firefox
|
|
||||||
|
|
||||||
# Needed only by orbitscreen extension
|
|
||||||
#if [ -z "${ORBITSCREENHOME}" ] ; then
|
|
||||||
# export "ORBITSCREENHOME=${EPICS_EXTENSIONS/src/orbitscreen}"
|
|
||||||
#fi
|
|
||||||
|
|
||||||
# Needed only by adt extension
|
|
||||||
#if [ -z "${ADTHOME}" ] ; then
|
|
||||||
# ADTHOME=
|
|
||||||
# export ADTHOME
|
|
||||||
#fi
|
|
||||||
|
|
||||||
# Needed only by ar extension (archiver)
|
|
||||||
#EPICS_AR_PORT=7002
|
|
||||||
#export EPICS_AR_PORT
|
|
||||||
|
|
||||||
# Needed for java extensions
|
|
||||||
if [ -z "${CLASSPATH}" ] ; then
|
|
||||||
CLASSPATH="${EPICS_EXTENSIONS}/javalib"
|
|
||||||
else
|
|
||||||
CLASSPATH="${CLASSPATH}:${EPICS_EXTENSIONS}/javalib"
|
|
||||||
fi
|
|
||||||
export CLASSPATH
|
|
||||||
|
|
||||||
# Allow private versions of extensions without a bin subdir
|
|
||||||
if [ -n "${EPICS_EXTENSIONS_PVT}" ] ; then
|
|
||||||
PATH="${PATH}:${EPICS_EXTENSIONS_PVT}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
#---------------------------------------------------------------
|
|
||||||
# Start of set R3.14 environment variables
|
|
||||||
#
|
|
||||||
EPICS_HOST_ARCH=`"${MY_EPICS_BASE}"/startup/EpicsHostArch.pl`
|
|
||||||
export EPICS_HOST_ARCH
|
|
||||||
|
|
||||||
# Allow private versions of base
|
|
||||||
if [ -n "${EPICS_BASE_PVT}" ] ; then
|
|
||||||
if [ -d "${EPICS_BASE_PVT}/bin/${EPICS_HOST_ARCH}" ]; then
|
|
||||||
PATH="${PATH}:${EPICS_BASE_PVT}/bin/${EPICS_HOST_ARCH}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Allow private versions of extensions
|
|
||||||
if [ -n "${EPICS_EXTENSIONS_PVT}" ] ; then
|
|
||||||
if [ -d "${EPICS_EXTENSIONS_PVT}/bin/${EPICS_HOST_ARCH}" ]; then
|
|
||||||
PATH="${PATH}:${EPICS_EXTENSIONS_PVT}/bin/${EPICS_HOST_ARCH}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
PATH="${PATH}:${EPICS_EXTENSIONS}/bin/${EPICS_HOST_ARCH}"
|
|
||||||
|
|
||||||
# End of set R3.14 environment variables
|
|
||||||
|
|
||||||
#---------------------------------------------------------------
|
|
||||||
#
|
|
||||||
## Start of set pre R3.14 environment variables
|
|
||||||
#
|
|
||||||
## Time service:
|
|
||||||
## EPICS_TS_MIN_WEST the local time difference from GMT.
|
|
||||||
#EPICS_TS_MIN_WEST=360
|
|
||||||
#export EPICS_TS_MIN_WEST
|
|
||||||
#
|
|
||||||
#HOST_ARCH=`"${MY_EPICS_BASE}"/startup/HostArch`
|
|
||||||
#export HOST_ARCH
|
|
||||||
#
|
|
||||||
## Allow private versions of base
|
|
||||||
#if [ -n "${EPICS_BASE_PVT}" ] ; then
|
|
||||||
# if [ -d "${EPICS_BASE_PVT}/bin/${HOST_ARCH}" ]; then
|
|
||||||
# PATH="${PATH}:${EPICS_BASE_PVT}/bin/${HOST_ARCH}"
|
|
||||||
# fi
|
|
||||||
#fi
|
|
||||||
#
|
|
||||||
## Allow private versions of extensions
|
|
||||||
#if [ -n "${EPICS_EXTENSIONS_PVT}" ] ; then
|
|
||||||
# if [ -d "${EPICS_EXTENSIONS_PVT}/bin/${HOST_ARCH}" ]; then
|
|
||||||
# PATH="${PATH}:${EPICS_EXTENSIONS_PVT}/bin/${HOST_ARCH}"
|
|
||||||
# fi
|
|
||||||
#fi
|
|
||||||
#
|
|
||||||
#PATH="${PATH}:${EPICS_EXTENSIONS}/lib/${HOST_ARCH}"
|
|
||||||
#
|
|
||||||
# End of set pre R3.14 environment variables
|
|
||||||
|
|
||||||
#---------------------------------------------------------------
|
|
||||||
@@ -1,122 +0,0 @@
|
|||||||
@ECHO OFF
|
|
||||||
REM *************************************************************************
|
|
||||||
REM Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
|
||||||
REM National Laboratory.
|
|
||||||
REM Copyright (c) 2002 The Regents of the University of California, as
|
|
||||||
REM Operator of Los Alamos National Laboratory.
|
|
||||||
REM EPICS BASE Versions 3.13.7
|
|
||||||
REM and higher are distributed subject to a Software License Agreement found
|
|
||||||
REM in file LICENSE that is included with this distribution.
|
|
||||||
REM *************************************************************************
|
|
||||||
REM
|
|
||||||
REM Site-specific EPICS environment settings
|
|
||||||
REM
|
|
||||||
REM sites should modify these definitions
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ====== REQUIRED ENVIRONMENT VARIABLES FOLLOW ======
|
|
||||||
REM ======================================================
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ---------------- WINDOWS ---------------------------
|
|
||||||
REM ======================================================
|
|
||||||
REM ----- WIN95 -----
|
|
||||||
REM set PATH=C:\WINDOWS;C:\WINDOWS\COMMAND
|
|
||||||
REM ----- WINNT, WIN2000 -----
|
|
||||||
REM set PATH=C:\WINNT;C:\WINNT\SYSTEM32
|
|
||||||
REM ----- WINXP, Vista, Windows 7 -----
|
|
||||||
set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\Wbem
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ---------------- make and perl ---------------------
|
|
||||||
REM ======================================================
|
|
||||||
|
|
||||||
REM --------------- ActiveState perl -------------------
|
|
||||||
set PATH=C:\Perl\bin;%PATH%
|
|
||||||
|
|
||||||
REM --------------- mingw make ------------------------
|
|
||||||
REM set PATH=C:\mingw-make\bin;%PATH%
|
|
||||||
REM set PATH=C:\mingw-make82-3\bin;%PATH%
|
|
||||||
|
|
||||||
REM --------------- gnuwin32 make ----------------------
|
|
||||||
set PATH=C:\gnuwin32\bin;%PATH%
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ---------------- cygwin tools ------------------------
|
|
||||||
REM ======================================================
|
|
||||||
REM (make & perl if above perl and make are REMs)
|
|
||||||
REM Dont use cygwin GNU make and Perl!
|
|
||||||
REM cygwin contains tk/tcl, vim, perl, and many unix tools
|
|
||||||
REM need grep from here NOT from cvs directory
|
|
||||||
set PATH=%PATH%;.;..
|
|
||||||
set PATH=%PATH%;c:\cygwin\bin
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM --------------- EPICS --------------------------------
|
|
||||||
REM ======================================================
|
|
||||||
set EPICS_HOST_ARCH=cygwin-x86
|
|
||||||
set PATH=%PATH%;G:\epics\base\bin\%EPICS_HOST_ARCH%
|
|
||||||
set PATH=%PATH%;G:\epics\extensions\bin\%EPICS_HOST_ARCH%
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ------- OPTIONAL ENVIRONMENT VARIABLES FOLLOW --------
|
|
||||||
REM ======================================================
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ----------------- remote CVS -------------------------
|
|
||||||
REM ======================================================
|
|
||||||
REM set CVS_RSH=c:/cygwin/bin/ssh.exe
|
|
||||||
REM set CVSROOT=:ext:jba@aps.anl.gov:/usr/local/epicsmgr/cvsroot
|
|
||||||
REM set HOME=c:/users/%USERNAME%
|
|
||||||
REM set HOME=c:/users/jba
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ------------------- Bazaar ---------------------------
|
|
||||||
REM ======================================================
|
|
||||||
set PATH=%PATH%;C:\Program files\Bazaar
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM ----------------- GNU make flags ---------------------
|
|
||||||
REM ======================================================
|
|
||||||
set MAKEFLAGS=-w
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM -------------- vim (use cygwin vim ) -----------------
|
|
||||||
REM ======================================================
|
|
||||||
REM HOME needed by vim to write .viminfo file.
|
|
||||||
REM VIM needed by vim to find _vimrc file.
|
|
||||||
REM set VIM=c:\cygwin
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM --------------- Epics Channel Access -----------------
|
|
||||||
REM Modify and uncomment the following lines
|
|
||||||
REM to override the base/configure/CONFIG_ENV defaults
|
|
||||||
REM ======================================================
|
|
||||||
REM set EPICS_CA_ADDR_LIST=n.n.n.n n.n.n.n
|
|
||||||
REM set EPICS_CA_AUTO_ADDR_LIST=YES
|
|
||||||
|
|
||||||
REM set EPICS_CA_CONN_TMO=30.0
|
|
||||||
REM set EPICS_CA_BEACON_PERIOD=15.0
|
|
||||||
REM set EPICS_CA_REPEATER_PORT=5065
|
|
||||||
REM set EPICS_CA_SERVER_PORT=5064
|
|
||||||
REM set EPICS_TS_MIN_WEST=420
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM --------------- JAVA ---------------------------------
|
|
||||||
REM ======================================================
|
|
||||||
REM Needed for java extensions
|
|
||||||
REM set CLASSPATH=G:\epics\extensions\javalib
|
|
||||||
REM set PATH=%PATH%;C:\j2sdk1.4.1_01\bin
|
|
||||||
REM set CLASSPATH=%CLASSPATH%;C:\j2sdk1.4.1_01\lib\tools.jar
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM --------------- Exceed -------------------------------
|
|
||||||
REM Needed for X11 extensions
|
|
||||||
REM ======================================================
|
|
||||||
REM set EX_VER=7.10
|
|
||||||
REM set EX_VER=12.00
|
|
||||||
REM set EX_VER=14.00
|
|
||||||
REM set PATH=%PATH%;C:\Exceed%EX_VER%\XDK\
|
|
||||||
REM set PATH=%PATH%;C:\Program Files\Hummingbird\Connectivity\%EX_VER%\Exceed\
|
|
||||||
|
|
||||||
|
|
||||||
96
startup/unix.csh
Normal file
96
startup/unix.csh
Normal file
@@ -0,0 +1,96 @@
|
|||||||
|
#*************************************************************************
|
||||||
|
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||||
|
# National Laboratory.
|
||||||
|
# Copyright (c) 2002 The Regents of the University of California, as
|
||||||
|
# Operator of Los Alamos National Laboratory.
|
||||||
|
# EPICS BASE Versions 3.13.7
|
||||||
|
# and higher are distributed subject to a Software License Agreement found
|
||||||
|
# in file LICENSE that is included with this distribution.
|
||||||
|
#*************************************************************************
|
||||||
|
#
|
||||||
|
# Site-specific EPICS environment settings
|
||||||
|
#
|
||||||
|
# Attempts to set EPICS_HOST_ARCH. Optionally, adds the EPICS Base
|
||||||
|
# install host architecture bin directory to PATH.
|
||||||
|
#
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
# Site serviceable parts (These definitions may be modified)
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Automatically set up the environment when possible ("yes" or "no").
|
||||||
|
# If set to yes, as much of the environment will be set up as possible.
|
||||||
|
# If set to no, just the minimum environment will be set up. More
|
||||||
|
# specific _auto_* definitions take precedence over this definition.
|
||||||
|
set _auto=no
|
||||||
|
|
||||||
|
# Automatically append to PATH ("yes" or "no"). If set to yes, the
|
||||||
|
# EPICS Base install host architecture bin directory will be added to
|
||||||
|
# PATH if possible. If set to no, the bin directory will not be added
|
||||||
|
# to PATH.
|
||||||
|
set _auto_path_append=$_auto
|
||||||
|
|
||||||
|
# The program used to run Perl scripts (pathname).
|
||||||
|
set _perl_prog=perl
|
||||||
|
|
||||||
|
# The EPICS host architecture specification for EPICS_HOST_ARCH
|
||||||
|
# (<os>-<arch>[-<toolset>] as defined in configure/CONFIG_SITE). If
|
||||||
|
# nonempty, the value will be used as the value of EPICS_HOST_ARCH. If
|
||||||
|
# empty, an attempt will be made to automatically determine the value
|
||||||
|
# with EpicsHostArch.pl.
|
||||||
|
set _epics_host_arch=
|
||||||
|
|
||||||
|
# The install location of EPICS Base (pathname). If nonempty, the
|
||||||
|
# EpicsHostArch.pl script from it, if it exists, will be used to
|
||||||
|
# determine EPICS_HOST_ARCH. If nonempty and EPICS_HOST_ARCH was
|
||||||
|
# determined successfully, it will be used to add the host architecture
|
||||||
|
# bin directory to PATH if _auto_path_append is yes.
|
||||||
|
set _epics_base=
|
||||||
|
|
||||||
|
# The source location of EPICS Base (pathname). If nonempty, the
|
||||||
|
# EpicsHostArch.pl script from it, if it exists and _epics_base is empty
|
||||||
|
# or it did not exist in the _epics_base location, will be used to
|
||||||
|
# determine EPICS_HOST_ARCH.
|
||||||
|
set _epics_base_src=
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
# Internal parts (There is typically no need to modify these)
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Define the possible locations of EpicsHostArch.pl
|
||||||
|
set _epics_host_arch_pl=
|
||||||
|
set _src_epics_host_arch_pl=
|
||||||
|
if ("$_epics_base" != '') then
|
||||||
|
set _epics_host_arch_pl="$_epics_base/lib/perl/EpicsHostArch.pl"
|
||||||
|
endif
|
||||||
|
if ("$_epics_base_src" != '') then
|
||||||
|
set _src_epics_host_arch_pl="$_epics_base_src/src/tools/EpicsHostArch.pl"
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Set the EPICS host architecture specification
|
||||||
|
if ("$_epics_host_arch" != '') then
|
||||||
|
setenv EPICS_HOST_ARCH "$_epics_host_arch"
|
||||||
|
else if (-e "$_epics_host_arch_pl") then
|
||||||
|
set _epics_host_arch=`"$_perl_prog" "$_epics_host_arch_pl"`
|
||||||
|
setenv EPICS_HOST_ARCH "$_epics_host_arch"
|
||||||
|
else if (-e "$_src_epics_host_arch_pl") then
|
||||||
|
set _epics_host_arch=`"$_perl_prog" "$_src_epics_host_arch_pl"`
|
||||||
|
setenv EPICS_HOST_ARCH "$_epics_host_arch"
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Add the EPICS Base host architecture bin directory to PATH
|
||||||
|
if ("$_auto_path_append" == yes) then
|
||||||
|
if ("$_epics_base" != '' && "$_epics_host_arch" != '') then
|
||||||
|
setenv PATH "${PATH}:$_epics_base/bin/$_epics_host_arch"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Don't leak variables into the environment
|
||||||
|
unset _auto
|
||||||
|
unset _auto_path_append
|
||||||
|
unset _perl_prog
|
||||||
|
unset _epics_host_arch
|
||||||
|
unset _epics_base
|
||||||
|
unset _epics_base_src
|
||||||
|
unset _epics_host_arch_pl
|
||||||
|
unset _src_epics_host_arch_pl
|
||||||
100
startup/unix.sh
Normal file
100
startup/unix.sh
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
#*************************************************************************
|
||||||
|
# Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
||||||
|
# National Laboratory.
|
||||||
|
# Copyright (c) 2002 The Regents of the University of California, as
|
||||||
|
# Operator of Los Alamos National Laboratory.
|
||||||
|
# EPICS BASE Versions 3.13.7
|
||||||
|
# and higher are distributed subject to a Software License Agreement found
|
||||||
|
# in file LICENSE that is included with this distribution.
|
||||||
|
#*************************************************************************
|
||||||
|
#
|
||||||
|
# Site-specific EPICS environment settings
|
||||||
|
#
|
||||||
|
# Attempts to set EPICS_HOST_ARCH. Optionally, adds the EPICS Base
|
||||||
|
# install host architecture bin directory to PATH.
|
||||||
|
#
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
# Site serviceable parts (These definitions may be modified)
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Automatically set up the environment when possible ("yes" or "no").
|
||||||
|
# If set to yes, as much of the environment will be set up as possible.
|
||||||
|
# If set to no, just the minimum environment will be set up. More
|
||||||
|
# specific _auto_* definitions take precedence over this definition.
|
||||||
|
_auto=no
|
||||||
|
|
||||||
|
# Automatically append to PATH ("yes" or "no"). If set to yes, the
|
||||||
|
# EPICS Base install host architecture bin directory will be added to
|
||||||
|
# PATH if possible. If set to no, the bin directory will not be added
|
||||||
|
# to PATH.
|
||||||
|
_auto_path_append=$_auto
|
||||||
|
|
||||||
|
# The program used to run Perl scripts (pathname).
|
||||||
|
_perl_prog=perl
|
||||||
|
|
||||||
|
# The EPICS host architecture specification for EPICS_HOST_ARCH
|
||||||
|
# (<os>-<arch>[-<toolset>] as defined in configure/CONFIG_SITE). If
|
||||||
|
# nonempty, the value will be used as the value of EPICS_HOST_ARCH. If
|
||||||
|
# empty, an attempt will be made to automatically determine the value
|
||||||
|
# with EpicsHostArch.pl.
|
||||||
|
_epics_host_arch=
|
||||||
|
|
||||||
|
# The install location of EPICS Base (pathname). If nonempty, the
|
||||||
|
# EpicsHostArch.pl script from it, if it exists, will be used to
|
||||||
|
# determine EPICS_HOST_ARCH. If nonempty and EPICS_HOST_ARCH was
|
||||||
|
# determined successfully, it will be used to add the host architecture
|
||||||
|
# bin directory to PATH if _auto_path_append is yes.
|
||||||
|
_epics_base=
|
||||||
|
|
||||||
|
# The source location of EPICS Base (pathname). If nonempty, the
|
||||||
|
# EpicsHostArch.pl script from it, if it exists and _epics_base is empty
|
||||||
|
# or it did not exist in the _epics_base location, will be used to
|
||||||
|
# determine EPICS_HOST_ARCH.
|
||||||
|
_epics_base_src=
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
# Internal parts (There is typically no need to modify these)
|
||||||
|
#-----------------------------------------------------------------------
|
||||||
|
|
||||||
|
# Define the possible locations of EpicsHostArch.pl
|
||||||
|
_epics_host_arch_pl=
|
||||||
|
_src_epics_host_arch_pl=
|
||||||
|
if [ -n "$_epics_base" ]; then
|
||||||
|
_epics_host_arch_pl="$_epics_base/lib/perl/EpicsHostArch.pl"
|
||||||
|
fi
|
||||||
|
if [ -n "$_epics_base_src" ]; then
|
||||||
|
_src_epics_host_arch_pl="$_epics_base_src/src/tools/EpicsHostArch.pl"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the EPICS host architecture specification
|
||||||
|
if [ -n "$_epics_host_arch" ]; then
|
||||||
|
EPICS_HOST_ARCH=$_epics_host_arch
|
||||||
|
export EPICS_HOST_ARCH
|
||||||
|
elif [ -e "$_epics_host_arch_pl" ]; then
|
||||||
|
_epics_host_arch=$("$_perl_prog" "$_epics_host_arch_pl")
|
||||||
|
EPICS_HOST_ARCH=$_epics_host_arch
|
||||||
|
export EPICS_HOST_ARCH
|
||||||
|
elif [ -e "$_src_epics_host_arch_pl" ]; then
|
||||||
|
_epics_host_arch=$("$_perl_prog" "$_src_epics_host_arch_pl")
|
||||||
|
EPICS_HOST_ARCH=$_epics_host_arch
|
||||||
|
export EPICS_HOST_ARCH
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Add the EPICS Base host architecture bin directory to PATH
|
||||||
|
if [ "$_auto_path_append" = yes ]; then
|
||||||
|
if [ -n "$_epics_base" ] && [ -n "$_epics_host_arch" ]; then
|
||||||
|
PATH="$PATH:$_epics_base/bin/$_epics_host_arch"
|
||||||
|
export PATH
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Don't leak variables into the environment
|
||||||
|
unset _auto
|
||||||
|
unset _auto_path_append
|
||||||
|
unset _perl_prog
|
||||||
|
unset _epics_host_arch
|
||||||
|
unset _epics_base
|
||||||
|
unset _epics_base_src
|
||||||
|
unset _epics_host_arch_pl
|
||||||
|
unset _src_epics_host_arch_pl
|
||||||
@@ -1,147 +1,105 @@
|
|||||||
@ECHO OFF
|
@echo off
|
||||||
REM *************************************************************************
|
rem *************************************************************************
|
||||||
REM Copyright (c) 2002 The University of Chicago, as Operator of Argonne
|
rem Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
|
||||||
REM National Laboratory.
|
rem National Laboratory.
|
||||||
REM Copyright (c) 2002 The Regents of the University of California, as
|
rem Copyright (c) 2002 The Regents of the University of California, as
|
||||||
REM Operator of Los Alamos National Laboratory.
|
rem Operator of Los Alamos National Laboratory.
|
||||||
REM EPICS BASE Versions 3.13.7
|
rem EPICS BASE is distributed subject to a Software License Agreement found
|
||||||
REM and higher are distributed subject to a Software License Agreement found
|
rem in file LICENSE that is included with this distribution.
|
||||||
REM in file LICENSE that is included with this distribution.
|
rem *************************************************************************
|
||||||
REM *************************************************************************
|
rem
|
||||||
REM
|
rem Site-specific EPICS environment settings
|
||||||
REM Site-specific EPICS environment settings
|
rem
|
||||||
REM
|
rem Sets EPICS_HOST_ARCH and the environment for Microsoft Visual Studio.
|
||||||
REM sites should modify these definitions
|
rem Optionally, resets PATH, adds Strawberry Perl to PATH, and adds the
|
||||||
|
rem EPICS Base install host architecture bin directory to PATH.
|
||||||
|
rem
|
||||||
|
|
||||||
REM ======================================================
|
rem ----------------------------------------------------------------------
|
||||||
REM ====== REQUIRED ENVIRONMENT VARIABLES FOLLOW ======
|
rem Site serviceable parts (These definitions may be modified)
|
||||||
REM ======================================================
|
rem ----------------------------------------------------------------------
|
||||||
|
|
||||||
REM ======================================================
|
rem The values of the definitions in this section must not contain
|
||||||
REM ---------------- WINDOWS ---------------------------
|
rem double-quotes.
|
||||||
REM ======================================================
|
rem
|
||||||
REM ----- WIN95 -----
|
rem * Right: set _foo=C:\foo
|
||||||
REM set PATH=C:\WINDOWS;C:\WINDOWS\COMMAND
|
rem * Right: set "_foo=C:\foo"
|
||||||
REM ----- WINNT, WIN2000 -----
|
rem * Wrong: set _foo="C:\foo"
|
||||||
REM set PATH=C:\WINNT;C:\WINNT\SYSTEM32
|
|
||||||
REM ----- WINXP, Vista, Windows 7 -----
|
|
||||||
set PATH=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\SYSTEM32\Wbem
|
|
||||||
|
|
||||||
REM ======================================================
|
rem Automatically set up the environment when possible ("yes" or "no").
|
||||||
REM ---------------- make and perl ---------------------
|
rem If set to yes, as much of the environment will be set up as possible.
|
||||||
REM ======================================================
|
rem If set to no, just the minimum environment will be set up. More
|
||||||
|
rem specific _auto_* definitions take precedence over this definition.
|
||||||
|
set _auto=no
|
||||||
|
|
||||||
REM --------------- ActiveState perl -------------------
|
rem Automatically reset PATH ("yes" or "no"). If set to yes, PATH will
|
||||||
set PATH=C:\Perl\bin;%PATH%
|
rem be reset to the value of _path_new. If set to no, PATH will not be
|
||||||
|
rem reset.
|
||||||
|
set _auto_path_reset=%_auto%
|
||||||
|
|
||||||
REM --------------- mingw make ------------------------
|
rem Automatically append to PATH ("yes" or "no"). If set to yes, the
|
||||||
REM set PATH=C:\mingw-make\bin;%PATH%
|
rem EPICS Base install host architecture bin directory will be added to
|
||||||
REM set PATH=C:\mingw-make82-3\bin;%PATH%
|
rem PATH if possible. If set to no, the bin directory will not be added
|
||||||
|
rem to PATH.
|
||||||
|
set _auto_path_append=%_auto%
|
||||||
|
|
||||||
REM --------------- gnuwin32 make ----------------------
|
rem The new value for PATH. If _auto_path_reset is yes, PATH will be set
|
||||||
set PATH=C:\gnuwin32\bin;%PATH%
|
rem to it.
|
||||||
|
set _path_new=C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem
|
||||||
|
|
||||||
REM ======================================================
|
rem The location of Strawberry Perl (pathname). If empty, Strawberry Perl
|
||||||
REM ---------------- cygwin tools ------------------------
|
rem is assumed to already be in PATH and will not be added. If nonempty,
|
||||||
REM ======================================================
|
rem Strawberry Perl will be added to PATH.
|
||||||
REM (make & perl if above perl and make are REMs)
|
set _strawberry_perl_home=C:\Strawberry
|
||||||
REM Dont use cygwin GNU make and Perl!
|
|
||||||
REM cygwin contains tk/tcl, vim, perl, and many unix tools
|
|
||||||
REM need grep from here NOT from cvs directory
|
|
||||||
REM set PATH=%PATH%;.;..
|
|
||||||
REM set PATH=%PATH%;c:\cygwin\bin
|
|
||||||
|
|
||||||
REM ======================================================
|
rem The location of Microsoft Visual Studio (pathname).
|
||||||
REM --------------- Visual c++ -------------------------
|
set _visual_studio_home=C:\Program Files (x86)\Microsoft Visual Studio 14.0
|
||||||
REM ======================================================
|
|
||||||
|
|
||||||
REM ------ Microsoft Visual Studio 2005 ------
|
rem The EPICS host architecture specification for EPICS_HOST_ARCH
|
||||||
REM call "C:\Program files\Microsoft Visual Studio 8\VC\vcvarsall.bat" x86_amd64
|
rem (<os>-<arch>[-<toolset>] as defined in configure/CONFIG_SITE).
|
||||||
REM set PATH=%PATH%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
|
set _epics_host_arch=win32-x86
|
||||||
REM set INCLUDE=%INCLUDE%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\include
|
|
||||||
REM REM set LIBPATH=%LIBPATH%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib
|
|
||||||
REM set LIB=%LIB%;C:\Program Files\Microsoft SDKs\Windows\v6.0A\lib
|
|
||||||
|
|
||||||
REM ------ Microsoft Visual Studio 2008 ------
|
rem The install location of EPICS Base (pathname). If nonempty and
|
||||||
REM call "C:\Program files\Microsoft Visual Studio 9.0\VC\bin\vcvars32.bat"
|
rem _auto_path_append is yes, it will be used to add the host architecture
|
||||||
REM call "C:\Program files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat" x86_amd64
|
rem bin directory to PATH.
|
||||||
REM set PATH=C:\Program Files\Microsoft SDKs\Windows\v7.0\bin;%PATH%
|
set _epics_base=
|
||||||
REM set INCLUDE=C:\Program Files\Microsoft SDKs\Windows\v7.0\include;%INCLUDE%
|
|
||||||
REM set LIBPATH=C:\Program Files\Microsoft SDKs\Windows\v7.0\lib;%LIBPATH%
|
|
||||||
REM set LIB=C:\Program Files\Microsoft SDKs\Windows\v7.0\lib;%LIB%
|
|
||||||
|
|
||||||
REM ----- Visual Studion 2010 -----
|
rem ----------------------------------------------------------------------
|
||||||
REM -- windows-x64 ---
|
rem Internal parts (There is typically no need to modify these)
|
||||||
REM call "C:\Program files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x64
|
rem ----------------------------------------------------------------------
|
||||||
REM -- win32-x86 ---
|
|
||||||
call "C:\Program files\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" x86
|
|
||||||
|
|
||||||
REM ======================================================
|
rem Reset PATH
|
||||||
REM --------------- EPICS --------------------------------
|
if "%_auto_path_reset%" == "yes" (
|
||||||
REM ======================================================
|
set "PATH=%_path_new%"
|
||||||
REM set EPICS_HOST_ARCH=windows-x64
|
)
|
||||||
set EPICS_HOST_ARCH=win32-x86
|
|
||||||
set PATH=%PATH%;G:\epics\base\bin\%EPICS_HOST_ARCH%
|
|
||||||
set PATH=%PATH%;G:\epics\extensions\bin\%EPICS_HOST_ARCH%
|
|
||||||
|
|
||||||
REM ======================================================
|
rem Add Strawberry Perl to PATH
|
||||||
REM ------- OPTIONAL ENVIRONMENT VARIABLES FOLLOW --------
|
if "%_strawberry_perl_home%" == "" goto after_add_strawberry_perl
|
||||||
REM ======================================================
|
rem Can't do this inside parentheses because PATH would be read only once
|
||||||
|
set "PATH=%PATH%;%_strawberry_perl_home%\c\bin"
|
||||||
|
set "PATH=%PATH%;%_strawberry_perl_home%\perl\site\bin"
|
||||||
|
set "PATH=%PATH%;%_strawberry_perl_home%\perl\bin"
|
||||||
|
:after_add_strawberry_perl
|
||||||
|
|
||||||
REM ======================================================
|
rem Set the environment for Microsoft Visual Studio
|
||||||
REM ----------------- remote CVS -------------------------
|
call "%_visual_studio_home%\VC\vcvarsall.bat" x86
|
||||||
REM ======================================================
|
|
||||||
REM set CVS_RSH=c:/cygwin/bin/ssh.exe
|
|
||||||
REM set CVSROOT=:ext:jba@aps.anl.gov:/usr/local/epicsmgr/cvsroot
|
|
||||||
REM set HOME=c:/users/%USERNAME%
|
|
||||||
REM set HOME=c:/users/jba
|
|
||||||
|
|
||||||
REM ======================================================
|
rem Set the EPICS host architecture specification
|
||||||
REM ------------------- Bazaar ---------------------------
|
set "EPICS_HOST_ARCH=%_epics_host_arch%"
|
||||||
REM ======================================================
|
|
||||||
set PATH=%PATH%;C:\Program files\Bazaar
|
|
||||||
|
|
||||||
REM ======================================================
|
rem Add the EPICS Base host architecture bin directory to PATH
|
||||||
REM ----------------- GNU make flags ---------------------
|
if "%_auto_path_append%" == "yes" (
|
||||||
REM ======================================================
|
if not "%_epics_base%" == "" (
|
||||||
set MAKEFLAGS=-w
|
set "PATH=%PATH%;%_epics_base%\bin\%_epics_host_arch%"
|
||||||
|
)
|
||||||
REM ======================================================
|
)
|
||||||
REM -------------- vim (use cygwin vim ) -----------------
|
|
||||||
REM ======================================================
|
|
||||||
REM HOME needed by vim to write .viminfo file.
|
|
||||||
REM VIM needed by vim to find _vimrc file.
|
|
||||||
REM set VIM=c:\cygwin
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM --------------- Epics Channel Access -----------------
|
|
||||||
REM Modify and uncomment the following lines
|
|
||||||
REM to override the base/configure/CONFIG_ENV defaults
|
|
||||||
REM ======================================================
|
|
||||||
REM set EPICS_CA_ADDR_LIST=n.n.n.n n.n.n.n
|
|
||||||
REM set EPICS_CA_AUTO_ADDR_LIST=YES
|
|
||||||
|
|
||||||
REM set EPICS_CA_CONN_TMO=30.0
|
|
||||||
REM set EPICS_CA_BEACON_PERIOD=15.0
|
|
||||||
REM set EPICS_CA_REPEATER_PORT=5065
|
|
||||||
REM set EPICS_CA_SERVER_PORT=5064
|
|
||||||
REM set EPICS_TS_MIN_WEST=420
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM --------------- JAVA ---------------------------------
|
|
||||||
REM ======================================================
|
|
||||||
REM Needed for java extensions
|
|
||||||
REM set CLASSPATH=G:\epics\extensions\javalib
|
|
||||||
REM set PATH=%PATH%;C:\j2sdk1.4.1_01\bin
|
|
||||||
REM set CLASSPATH=%CLASSPATH%;C:\j2sdk1.4.1_01\lib\tools.jar
|
|
||||||
|
|
||||||
REM ======================================================
|
|
||||||
REM --------------- Exceed -------------------------------
|
|
||||||
REM Needed for X11 extensions
|
|
||||||
REM ======================================================
|
|
||||||
REM set EX_VER=7.10
|
|
||||||
REM set EX_VER=12.00
|
|
||||||
REM set EX_VER=14.00
|
|
||||||
REM set PATH=%PATH%;C:\Exceed%EX_VER%\XDK\
|
|
||||||
REM set PATH=%PATH%;C:\Program Files\Hummingbird\Connectivity\%EX_VER%\Exceed\
|
|
||||||
|
|
||||||
|
rem Don't leak variables into the environment
|
||||||
|
set _auto=
|
||||||
|
set _auto_path_reset=
|
||||||
|
set _auto_path_append=
|
||||||
|
set _path_new=
|
||||||
|
set _strawberry_perl_home=
|
||||||
|
set _visual_studio_home=
|
||||||
|
set _epics_host_arch=
|
||||||
|
set _epics_base=
|
||||||
|
|||||||
105
startup/windows.bat
Normal file
105
startup/windows.bat
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
@echo off
|
||||||
|
rem *************************************************************************
|
||||||
|
rem Copyright (c) 2017 UChicago Argonne LLC, as Operator of Argonne
|
||||||
|
rem National Laboratory.
|
||||||
|
rem Copyright (c) 2002 The Regents of the University of California, as
|
||||||
|
rem Operator of Los Alamos National Laboratory.
|
||||||
|
rem EPICS BASE is distributed subject to a Software License Agreement found
|
||||||
|
rem in file LICENSE that is included with this distribution.
|
||||||
|
rem *************************************************************************
|
||||||
|
rem
|
||||||
|
rem Site-specific EPICS environment settings
|
||||||
|
rem
|
||||||
|
rem Sets EPICS_HOST_ARCH and the environment for Microsoft Visual Studio.
|
||||||
|
rem Optionally, resets PATH, adds Strawberry Perl to PATH, and adds the
|
||||||
|
rem EPICS Base install host architecture bin directory to PATH.
|
||||||
|
rem
|
||||||
|
|
||||||
|
rem ----------------------------------------------------------------------
|
||||||
|
rem Site serviceable parts (These definitions may be modified)
|
||||||
|
rem ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
rem The values of the definitions in this section must not contain
|
||||||
|
rem double-quotes.
|
||||||
|
rem
|
||||||
|
rem * Right: set _foo=C:\foo
|
||||||
|
rem * Right: set "_foo=C:\foo"
|
||||||
|
rem * Wrong: set _foo="C:\foo"
|
||||||
|
|
||||||
|
rem Automatically set up the environment when possible ("yes" or "no").
|
||||||
|
rem If set to yes, as much of the environment will be set up as possible.
|
||||||
|
rem If set to no, just the minimum environment will be set up. More
|
||||||
|
rem specific _auto_* definitions take precedence over this definition.
|
||||||
|
set _auto=no
|
||||||
|
|
||||||
|
rem Automatically reset PATH ("yes" or "no"). If set to yes, PATH will
|
||||||
|
rem be reset to the value of _path_new. If set to no, PATH will not be
|
||||||
|
rem reset.
|
||||||
|
set _auto_path_reset=%_auto%
|
||||||
|
|
||||||
|
rem Automatically append to PATH ("yes" or "no"). If set to yes, the
|
||||||
|
rem EPICS Base install host architecture bin directory will be added to
|
||||||
|
rem PATH if possible. If set to no, the bin directory will not be added
|
||||||
|
rem to PATH.
|
||||||
|
set _auto_path_append=%_auto%
|
||||||
|
|
||||||
|
rem The new value for PATH. If _auto_path_reset is yes, PATH will be set
|
||||||
|
rem to it.
|
||||||
|
set _path_new=C:\Windows\System32;C:\Windows;C:\Windows\System32\wbem
|
||||||
|
|
||||||
|
rem The location of Strawberry Perl (pathname). If empty, Strawberry Perl
|
||||||
|
rem is assumed to already be in PATH and will not be added. If nonempty,
|
||||||
|
rem Strawberry Perl will be added to PATH.
|
||||||
|
set _strawberry_perl_home=C:\Strawberry
|
||||||
|
|
||||||
|
rem The location of Microsoft Visual Studio (pathname).
|
||||||
|
set _visual_studio_home=C:\Program Files (x86)\Microsoft Visual Studio 14.0
|
||||||
|
|
||||||
|
rem The EPICS host architecture specification for EPICS_HOST_ARCH
|
||||||
|
rem (<os>-<arch>[-<toolset>] as defined in configure/CONFIG_SITE).
|
||||||
|
set _epics_host_arch=windows-x64
|
||||||
|
|
||||||
|
rem The install location of EPICS Base (pathname). If nonempty and
|
||||||
|
rem _auto_path_append is yes, it will be used to add the host architecture
|
||||||
|
rem bin directory to PATH.
|
||||||
|
set _epics_base=
|
||||||
|
|
||||||
|
rem ----------------------------------------------------------------------
|
||||||
|
rem Internal parts (There is typically no need to modify these)
|
||||||
|
rem ----------------------------------------------------------------------
|
||||||
|
|
||||||
|
rem Reset PATH
|
||||||
|
if "%_auto_path_reset%" == "yes" (
|
||||||
|
set "PATH=%_path_new%"
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Add Strawberry Perl to PATH
|
||||||
|
if "%_strawberry_perl_home%" == "" goto after_add_strawberry_perl
|
||||||
|
rem Can't do this inside parentheses because PATH would be read only once
|
||||||
|
set "PATH=%PATH%;%_strawberry_perl_home%\c\bin"
|
||||||
|
set "PATH=%PATH%;%_strawberry_perl_home%\perl\site\bin"
|
||||||
|
set "PATH=%PATH%;%_strawberry_perl_home%\perl\bin"
|
||||||
|
:after_add_strawberry_perl
|
||||||
|
|
||||||
|
rem Set the environment for Microsoft Visual Studio
|
||||||
|
call "%_visual_studio_home%\VC\vcvarsall.bat" x64
|
||||||
|
|
||||||
|
rem Set the EPICS host architecture specification
|
||||||
|
set "EPICS_HOST_ARCH=%_epics_host_arch%"
|
||||||
|
|
||||||
|
rem Add the EPICS Base host architecture bin directory to PATH
|
||||||
|
if "%_auto_path_append%" == "yes" (
|
||||||
|
if not "%_epics_base%" == "" (
|
||||||
|
set "PATH=%PATH%;%_epics_base%\bin\%_epics_host_arch%"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
rem Don't leak variables into the environment
|
||||||
|
set _auto=
|
||||||
|
set _auto_path_reset=
|
||||||
|
set _auto_path_append=
|
||||||
|
set _path_new=
|
||||||
|
set _strawberry_perl_home=
|
||||||
|
set _visual_studio_home=
|
||||||
|
set _epics_host_arch=
|
||||||
|
set _epics_base=
|
||||||
Reference in New Issue
Block a user