diff --git a/documentation/README.1st b/documentation/README.1st
deleted file mode 100644
index 177205805..000000000
--- a/documentation/README.1st
+++ /dev/null
@@ -1,344 +0,0 @@
- Installation Instructions
-
- EPICS Base Release 7.0.3
-
- --------------------------------------------------------------------------
-
- Table of Contents
-
- * What is EPICS base?
- * What is new in this release?
- * Copyright
- * Supported platforms
- * Supported compilers
- * Software requirements
- * Host system storage requirements
- * Documentation
- * Directory Structure
- * Build related components
- * Building EPICS base (Unix and Win32)
- * Example application and extension
- * Multiple host platforms
-
- --------------------------------------------------------------------------
-
- What is EPICS base?
-
- The Experimental Physics and Industrial Control Systems (EPICS) is an
- extensible set of software components and tools with which application
- developers can create a control system. This control system can be used
- to control accelerators, detectors, telescopes, or other scientific
- experimental equipment. EPICS base is the set of core software, i.e. the
- components of EPICS without which EPICS would not function. EPICS base
- allows an arbitrary number of target systems, IOCs (input/output
- controllers), and host systems, OPIs (operator interfaces) of various
- types.
-
- What is new in this release?
-
- Please check the RELEASE_NOTES file in the distribution for description
- of changes and release migration details.
-
- Copyright
-
- Please review the LICENSE file included in the distribution for legal
- terms of usage.
-
- Supported platforms
-
- The list of platforms supported by this version of EPICS base is given
- in the configure/CONFIG_SITE file. If you are trying to build EPICS Base
- on an unlisted host or for a different target machine you must have the
- proper host/target cross compiler and header files, and you will have to
- create and add the appropriate new configure files to the
- base/configure/os/directory. You can start by copying existing
- configuration files in the configure/os directory and then make changes
- for your new platforms.
-
- Supported compilers
-
- This version of EPICS base has been built and tested using the host
- vendor's C and C++ compilers, as well as the GNU gcc and g++ compilers.
- The GNU cross-compilers work for all cross-compiled targets. You may
- need the C and C++ compilers to be in your search path to do EPICS
- builds; check the definitions of CC and CCC in
- base/configure/os/CONFIG. Perl Unzip and tar (Winzip on WIN32 systems) Target systems vxWorks Consult the vxWorks
- 6.x EPICS web pages and the vxWorks documentation for information
- about configuring your vxWorks operating system for use with EPICS. RTEMS Command-line editing libraries Release specific documentation can also be found in the base/documentation
- directory of the distribution. EPICS_HOST_ARCH PERLLIB PATH LD_LIBRARY_PATH It is recommended that you do a "gnumake clean uninstall" at the
- root directory of an EPICS directory structure before each complete
- rebuild to ensure that all components will be rebuilt.
-
- Instructions for building and executing the example IOC application
- can be found in the section "Example Application" of Chapter 2,
- "Getting Started", in the "IOC Application Developer's Guide" for this
- release. The "Example IOC Application" section briefly explains how to
- create and build an example application in a user created <top>
- directory. It also explains how to run the example application on a
- vxWorks ioc or as a process on the host system.
- By running the example application as a host-based IOC, you will be
- able to quickly implement a complete EPICS system and be able to run channel
- access clients on the host system.
-
-
- A perl script,
- makeBaseExt.pl, is included in the distribution file. This script will
- create a sample extension that can be built and executed. The
- makeBaseApp.pl and makeBaseExt.pl scripts are installed into the
- install location bin/<hostarch> directory during the base build.
-Installation Instructions
-EPICS Base Release 7.0.3
-
- Table of Contents
-
-
-
-
- What is EPICS base?
-The Experimental Physics and Industrial Control Systems
- (EPICS) is an extensible set of software components and tools with
- which application developers can create a control system. This control
- system can be used to control accelerators, detectors, telescopes, or
- other scientific experimental equipment. EPICS base is the set of core
- software, i.e. the components of EPICS without which EPICS would not
- function. EPICS base allows an arbitrary number of target systems, IOCs
- (input/output controllers), and host systems, OPIs (operator
- interfaces) of various types.
-
- What is new in this release?
- Please check the RELEASE_NOTES file in the distribution for
- description of changes and release migration details.
-
- Copyright
-Please review the LICENSE file included in the
- distribution for legal terms of usage.
-
- Supported platforms
-
-The list of platforms supported by this version of EPICS base
- is given in the configure/CONFIG_SITE file. If you are trying to build
- EPICS Base on an unlisted host or for a different target machine you
- must have the proper host/target cross compiler and header files, and
- you will have to create and add the appropriate new configure files to
- the base/configure/os/directory. You can start by copying existing
- configuration files in the configure/os directory and then make changes
- for your new platforms.
-
- Supported compilers
-
-This version of EPICS base has been built and tested using the host
- vendor's C and C++ compilers, as well as the GNU gcc and g++ compilers. The GNU
- cross-compilers work for all cross-compiled targets. You may need the C and C++
- compilers to be in your search path to do EPICS builds; check the definitions
- of CC and CCC in base/configure/os/CONFIG.<host>.<host> if you have
- problems.
-
- Software requirements
-
-GNU make
-
-
- You must use the GNU version of make for EPICS builds, and we now recommend
- version 4.1 or later (version 3.82 may work on Linux, but doesn't on Windows).
-
-
- You must have Perl version 5.8.1 or later installed. The EPICS configuration
- files do not specify the perl full pathname, so the perl executable must
- be found through your normal search path.
- You must have tools available to unzip and untar the EPICS base
- distribution file.
- EPICS supports IOCs running on embedded platforms such as VxWorks
- and RTEMS built using a cross-compiler, and also supports soft IOCs running
- as processes on the host platform.
- You must have vxWorks 6 installed if any of your target systems are vxWorks
- systems; the C++ compilers for vxWorks 5.x are now too old to support. The
- vxWorks installation provides the cross-compiler and header files needed to
- build for these targets. The absolute path to and the version number of the
- vxWorks installation must be set in the
- base/configure/os/CONFIG_SITE.Common.vxWorksCommon file or in one of its
- target-specific overrides.
- For RTEMS targets, you need RTEMS core and toolset version 4.9.2 or 4.10. The
- newer 4.11 or 5.x releases are not supported yet.
-
- GNU readline or other OS-specific libraries can be used by the IOC shell to
- provide command line editing and history recall. The default setting is
- different for each OS. On Linux the default is to use READLINE since most
- distributions include it. On MacOS the default is also READLINE since Apple
- provides a compatible library, although it isn't GNU. On RTEMS we support GNU
- readline and Tecla, although the default is to use neither since these have to
- be added to the RTEMS installation separately. On vxWorks we support the
- built-in ledLib library. Host system storage requirements
-
-The compressed tar file is approximately 1.6 MB in size. The
- distribution source tree takes up approximately 12 MB. Each host target will
- need around 40 MB for build files, and each cross-compiled target around 20
- MB.
-
- Documentation
-EPICS documentation is available through the
- EPICS website at Argonne.
-
-
- Directory Structure
-
-
-Distribution directory structure:
-
-
- base Root directory of the base distribution
- base/configure Operating system independent build config files
- base/configure/os Operating system dependent build config files
- base/documentation Distribution documentation
- base/src Source code in various subdirectories
- base/startup Scripts for setting up path and environment
-
-
-Install directories created by the build:
-
- bin Installed scripts and executables in subdirs
- cfg Installed build configuration files
- db Installed data bases
- dbd Installed data base definitions
- doc Installed documentation files
- html Installed html documentation
- include Installed header files
- include/os Installed os specific header files in subdirs
- include/compiler Installed compiler-specific header files
- lib Installed libraries in arch subdirectories
- lib/perl Installed perl modules
- templates Installed templates
-
- Build related components
-
-
-
-
-base/documentation directory - contains setup, build, and install
- documents
-
- README.1st Instructions for setup and building epics base
- README.html html version of README.1st
- README.darwin.html Installation notes for Mac OS X (Darwin)
- RELEASE_NOTES.html Notes on release changes
- KnownProblems.html List of known problems and workarounds
-
-
-base/startup directory - contains scripts to set environment and path
-
- EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
- unix.csh C shell script to set path and env variables
- unix.sh Bourne shell script to set path and env variables
- win32.bat Bat file example to configure win32-x86 target
- windows.bat Bat file example to configure windows-x64 target
-
-
-base/configure directory - contains build definitions and rules
-
- CONFIG Includes configure files and allows variable overrides
- CONFIG.CrossCommon Cross build definitions
- CONFIG.gnuCommon Gnu compiler build definitions for all archs
- CONFIG_ADDONS Definitions for <osclass> and DEFAULT options
- CONFIG_APP_INCLUDE
- CONFIG_BASE EPICS base tool and location definitions
- CONFIG_BASE_VERSION Definitions for EPICS base version number
- CONFIG_COMMON Definitions common to all builds
- CONFIG_ENV Definitions of EPICS environment variables
- CONFIG_FILE_TYPE
- CONFIG_SITE Site specific make definitions
- CONFIG_SITE_ENV Site defaults for EPICS environment variables
- MAKEFILE Installs CONFIG* RULES* creates
- RELEASE Location of external products
- RULES Includes appropriate rules file
- RULES.Db Rules for database and database definition files
- RULES.ioc Rules for application iocBoot/ioc* directory
- RULES_ARCHS Definitions and rules for building architectures
- RULES_BUILD Build and install rules and definitions
- RULES_DIRS Definitions and rules for building subdirectories
- RULES_EXPAND
- RULES_FILE_TYPE
- RULES_TARGET
- RULES_TOP Rules specific to a <top> dir (uninstall and tar)
- Sample.Makefile Sample makefile with comments
-
-
-base/configure/os directory - contains os-arch specific definitions
-
- CONFIG.<host>.<target> Specific host-target build definitions
- CONFIG.Common.<target> Specific target definitions for all hosts
- CONFIG.<host>.Common Specific host definitions for all targets
- CONFIG.UnixCommon.Common Definitions for Unix hosts and all targets
- CONFIG.Common.UnixCommon Definitions for Unix targets and all hosts
- CONFIG.Common.vxWorksCommon Specific host definitions for all vx targets
- CONFIG_SITE.<host>.<target> Site specific host-target definitions
- CONFIG_SITE.Common.<target> Site specific target defs for all hosts
- CONFIG_SITE.<host>.Common Site specific host defs for all targets
-
-
- Building EPICS base (Unix and Win32)
-
-
-
-
- Unpack file
-
-Unzip and untar the distribution file. Use WinZip on Windows
- systems.
-
-
-Set environment variables
-
-Files in the base/startup directory have been provided to
- help set required path and other environment variables.
-
-
-
-
- Before you can build or use EPICS Base, the environment variable
- EPICS_HOST_ARCH should be defined. A perl script EpicsHostArch.pl in the
- base/startup directory has been provided to help set EPICS_HOST_ARCH.
- You should have EPICS_HOST_ARCH set to your host operating system
- followed by a dash and then your CPU architecture, e.g. linux-x86_64.
- If you are not using the OS vendor's c/c++ compiler for host builds,
- you will need another dash followed by the alternate compiler name
- (e.g. "-gnu" for GNU c/c++ compilers on a solaris host or "-mingw"
- for MinGW c/c++ compilers on a WIN32 host). See configure/CONFIG_SITE
- for a list of supported EPICS_HOST_ARCH values.
- On WIN32, some versions of Perl require that the environment
- variable PERLLIB be set to <perl directory location>.
- As already mentioned, you must have the perl executable and you may
- need C and C++ compilers in your search path. For building base you
- also must have echo in your search path. For Unix host builds you also
- need ln, cpp, cp, rm, mv, and mkdir in your search path and /bin/chmod
- must exist. On some Unix systems you may also need ar and ranlib in
- your path, and the C compiler may require as and ld in your path. On
- solaris systems you need uname in your path.
-
- EPICS shared libraries and executables normally contain the full path
- to any libraries they require.
- However, if you move the EPICS files or directories from their build-time
- location then in order for the shared libraries to be found at runtime
- LD_LIBRARY_PATH must include the full pathname to
- $(INSTALL_LOCATION)/lib/$(EPICS_HOST_ARCH) when invoking executables, or
- some equivalent OS-specific mechanism (such as /etc/ld.so.conf on Linux)
- must be used.
- Shared libraries are now built by default on all Unix type hosts.Do site-specific build configuration
-
-
-Site configuration
-
-
- To configure EPICS, you may want to modify the default definitions
- in the following files:
-
- configure/CONFIG_SITE Build choices. Specify target archs.
- configure/CONFIG_SITE_ENV Environment variable defaults
- configure/RELEASE TORNADO2 full path location
-
-
- Host configuration
- To configure each host system, you may override the default
- definitions by adding a new file in the configure/os directory with
- override definitions. The new file should have the same name as the
- distribution file to be overridden except with CONFIG in the name
- changed to CONFIG_SITE.
-
-
- configure/os/CONFIG.<host>.<host> Host build settings
- configure/os/CONFIG.<host>.Common Host common build settings
-
-
-Target configuration
- To configure each target system, you may override the default
- definitions by adding a new file in the configure/os directory with
- override definitions. The new file should have the same name as the
- distribution file to be overridden except with CONFIG in the name
- replaced by CONFIG_SITE. This step is necessary even if the host system
- is the only target system.
-
- configure/os/CONFIG.Common.<target> Target common settings
- configure/os/CONFIG.<host>.<target> Host-target settings
-
-Build EPICS base
-After configuring the build you should be able to build
- EPICS base by issuing the following commands in the distribution's root
- directory (base):
-
-
- gnumake clean uninstall
- gnumake
-
-
- The command "gnumake clean uninstall"
- will remove all files and directories generated by a previous build.
- The command "gnumake" will build and install everything for the
- configured host and targets.
-
- Example application and extension
-A perl tool, makeBaseApp.pl is included in the distribution
- file. This script will create a sample application that can be built
- and then executed to try out this release of base.
-
-
-
- Multiple host platforms
-You can build using a single EPICS directory structure on
- multiple host systems and for multiple cross target systems. The
- intermediate and binary files generated by the build will be created in
- separate subdirectories and installed into the appropriate separate
- host/target install directories. EPICS executables and perl scripts are
- installed into the $(INSTALL_LOCATION)/bin/<arch> directories.
- Libraries are installed into $(INSTALL_LOCATION)/lib/<arch>.
- The default definition for $(INSTALL_LOCATION) is $(TOP)
- which is the root directory in the distribution directory structure,
- base. Created object files are stored in O.<arch> source
- subdirectories, This allows objects for multiple cross target
- architectures to be maintained at the same time. To build EPICS base
- for a specific host/target combination you must have the proper
- host/target C/C++ cross compiler and target header files and the
- base/configure/os directory must have the appropriate configure files.
-
-
-
diff --git a/documentation/README.md b/documentation/README.md
new file mode 100644
index 000000000..444dd44cc
--- /dev/null
+++ b/documentation/README.md
@@ -0,0 +1,375 @@
+# Installation Instructions
+
+## EPICS Base Release 3.15.6
+
+
+
+-----
+
+### Table of Contents
+
+ - [What is EPICS base?](#0_0_1)
+ - [What is new in this release?](#0_0_2)
+ - [Copyright](#0_0_3)
+ - [Supported platforms](#0_0_4)
+ - [Supported compilers](#0_0_5)
+ - [Software requirements](#0_0_6)
+ - [Host system storage requirements](#0_0_7)
+ - [Documentation](#0_0_8)
+ - [Directory Structure](#0_0_10)
+ - [Build related components](#0_0_11)
+ - [Building EPICS base (Unix and Win32)](#0_0_12)
+ - [Example application and extension](#0_0_13)
+ - [Multiple host platforms](#0_0_14)
+
+-----
+
+### What is EPICS base?
+
+The Experimental Physics and Industrial Control Systems (EPICS) is an
+extensible set of software components and tools with which application
+developers can create a control system. This control system can be
+used to control accelerators, detectors, telescopes, or other
+scientific experimental equipment. EPICS base is the set of core
+software, i.e. the components of EPICS without which EPICS would not
+function. EPICS base allows an arbitrary number of target systems,
+IOCs (input/output controllers), and host systems, OPIs (operator
+interfaces) of various types.
+
+### What is new in this release?
+
+Please check the RELEASE\_NOTES file in the distribution for
+description of changes and release migration details.
+
+### Copyright
+
+Please review the LICENSE file included in the distribution for legal
+terms of usage.
+
+### Supported platforms
+
+The list of platforms supported by this version of EPICS base is given
+in the configure/CONFIG\_SITE file. If you are trying to build EPICS
+Base on an unlisted host or for a different target machine you must
+have the proper host/target cross compiler and header files, and you
+will have to create and add the appropriate new configure files to the
+base/configure/os/directory. You can start by copying existing
+configuration files in the configure/os directory and then make
+changes for your new platforms.
+
+### Supported compilers
+
+This version of EPICS base has been built and tested using the host
+vendor's C and C++ compilers, as well as the GNU gcc and g++
+compilers. The GNU cross-compilers work for all cross-compiled
+targets. You may need the C and C++ compilers to be in your search
+path to do EPICS builds; check the definitions of CC and CCC in
+base/configure/os/CONFIG.<host>.<host> if you have problems.
+
+### Software requirements
+
+**GNU make**
+You must use GNU make, gnumake, for any EPICS builds. Set your path so
+that a gnumake version 3.81 or later is available.
+
+**Perl**
+You must have Perl version 5.8.1 or later installed. The EPICS
+configuration files do not specify the perl full pathname, so the perl
+executable must be found through your normal search path.
+
+**Unzip and tar (Winzip on WIN32 systems)**
+You must have tools available to unzip and untar the EPICS base
+distribution file.
+
+**Target systems**
+EPICS supports IOCs running on embedded platforms such as VxWorks and
+RTEMS built using a cross-compiler, and also supports soft IOCs
+running as processes on the host platform.
+
+**vxWorks**
+You must have vxWorks 5.5.x or 6.x installed if any of your target
+systems are vxWorks systems; the C++ compiler for vxWorks 5.4 is now
+too old to support. The vxWorks installation provides the
+cross-compiler and header files needed to build for these targets. The
+absolute path to and the version number of the vxWorks installation
+must be set in the base/configure/os/CONFIG\_SITE.Common.vxWorksCommon
+file or in one of its target-specific overrides.
+
+Consult the [vxWorks 5.x](https://epics.anl.gov/base/tornado.php) or
+[vxWorks 6.x](https://epics.anl.gov/base/vxWorks6.php) EPICS web pages
+about and the vxWorks documentation for information about configuring
+your vxWorks operating system for use with EPICS.
+
+**RTEMS**
+For RTEMS targets, you need RTEMS core and toolset version 4.9.2 or
+later.
+
+**GNU readline or Tecla library**
+GNU readline and Tecla libraries can be used by the IOC shell to
+provide command line editing and command line history recall and edit.
+GNU readline (or Tecla library) must be installed on your target
+system when COMMANDLINE\_LIBRARY is set to READLINE (or TECLA) for
+that target. EPICS (EPICS shell) is the default specified in
+CONFIG\_COMMON. A READLINE override is defined for linux-x86 in the
+EPICS distribution. Comment out COMMANDLINE\_LIBRARY=READLINE in
+configure/os/CONFIG\_SITE.Common.linux-x86 if readline is not
+installed on linux-x86. Command-line editing and history will then be
+those supplied by the os. On vxWorks the ledLib command-line input
+library is used instead.
+
+### Host system storage requirements
+
+The compressed tar file is approximately 1.6 MB in size. The
+distribution source tree takes up approximately 12 MB. Each host
+target will need around 40 MB for build files, and each cross-compiled
+target around 20 MB.
+
+### Documentation
+
+EPICS documentation is available through the [EPICS
+website](https://epics.anl.gov/) at Argonne.
+
+Release specific documentation can also be found in the
+base/documentation directory of the distribution.
+
+### Directory Structure
+
+#### Distribution directory structure:
+
+```
+ base Root directory of the base distribution
+ base/configure Operating system independent build config files
+ base/configure/os Operating system dependent build config files
+ base/documentation Distribution documentation
+ base/src Source code in various subdirectories
+ base/startup Scripts for setting up path and environment
+```
+
+#### Install directories created by the build:
+
+```
+ bin Installed scripts and executables in subdirs
+ cfg Installed build configuration files
+ db Installed data bases
+ dbd Installed data base definitions
+ doc Installed documentation files
+ html Installed html documentation
+ include Installed header files
+ include/os Installed os specific header files in subdirs
+ include/compiler Installed compiler-specific header files
+ lib Installed libraries in arch subdirectories
+ lib/perl Installed perl modules
+ templates Installed templates
+```
+
+### Build related components
+
+#### base/documentation directory - contains setup, build, and install documents
+
+```
+ README.md Instructions for setup and building epics base
+ README.darwin.html Installation notes for Mac OS X (Darwin)
+ RELEASE_NOTES.html Notes on release changes
+ KnownProblems.html List of known problems and workarounds
+```
+
+#### base/startup directory - contains scripts to set environment and path
+
+```
+ EpicsHostArch Shell script to set EPICS_HOST_ARCH env variable
+ unix.csh C shell script to set path and env variables
+ unix.sh Bourne shell script to set path and env variables
+ win32.bat Bat file example to configure win32-x86 target
+ windows.bat Bat file example to configure windows-x64 target
+```
+
+#### base/configure directory - contains build definitions and rules
+
+```
+ CONFIG Includes configure files and allows variable overrides
+ CONFIG.CrossCommon Cross build definitions
+ CONFIG.gnuCommon Gnu compiler build definitions for all archs
+ CONFIG_ADDONS Definitions for <osclass> and DEFAULT options
+ CONFIG_APP_INCLUDE
+ CONFIG_BASE EPICS base tool and location definitions
+ CONFIG_BASE_VERSION Definitions for EPICS base version number
+ CONFIG_COMMON Definitions common to all builds
+ CONFIG_ENV Definitions of EPICS environment variables
+ CONFIG_FILE_TYPE
+ CONFIG_SITE Site specific make definitions
+ CONFIG_SITE_ENV Site defaults for EPICS environment variables
+ MAKEFILE Installs CONFIG* RULES* creates
+ RELEASE Location of external products
+ RULES Includes appropriate rules file
+ RULES.Db Rules for database and database definition files
+ RULES.ioc Rules for application iocBoot/ioc* directory
+ RULES_ARCHS Definitions and rules for building architectures
+ RULES_BUILD Build and install rules and definitions
+ RULES_DIRS Definitions and rules for building subdirectories
+ RULES_EXPAND
+ RULES_FILE_TYPE
+ RULES_TARGET
+ RULES_TOP Rules specific to a <top> dir (uninstall and tar)
+ Sample.Makefile Sample makefile with comments
+```
+
+#### base/configure/os directory - contains os-arch specific definitions
+
+```
+ CONFIG.<host>.<target> Specific host-target build definitions
+ CONFIG.Common.<target> Specific target definitions for all hosts
+ CONFIG.<host>.Common Specific host definitions for all targets
+ CONFIG.UnixCommon.Common Definitions for Unix hosts and all targets
+ CONFIG.Common.UnixCommon Definitions for Unix targets and all hosts
+ CONFIG.Common.vxWorksCommon Specific host definitions for all vx targets
+ CONFIG_SITE.<host>.<target> Site specific host-target definitions
+ CONFIG_SITE.Common.<target> Site specific target defs for all hosts
+ CONFIG_SITE.<host>.Common Site specific host defs for all targets
+```
+
+### Building EPICS base (Unix and Win32)
+
+#### Unpack file
+
+Unzip and untar the distribution file. Use WinZip on Windows
+systems.
+
+#### Set environment variables
+
+Files in the base/startup directory have been provided to help set
+required path and other environment variables.
+
+**EPICS\_HOST\_ARCH**
+Before you can build or use EPICS R3.15, the environment variable
+EPICS\_HOST\_ARCH must be defined. A perl script EpicsHostArch.pl in
+the base/startup directory has been provided to help set
+EPICS\_HOST\_ARCH. You should have EPICS\_HOST\_ARCH set to your
+host operating system followed by a dash and then your host
+architecture, e.g. solaris-sparc. If you are not using the OS
+vendor's c/c++ compiler for host builds, you will need another dash
+followed by the alternate compiler name (e.g. "-gnu" for GNU c/c++
+compilers on a solaris host or "-mingw" for MinGW c/c++ compilers on
+a WIN32 host). See configure/CONFIG\_SITE for a list of supported
+EPICS\_HOST\_ARCH values.
+
+**PERLLIB**
+On WIN32, some versions of Perl require that the environment
+variable PERLLIB be set to <perl directory location>.
+
+**PATH**
+As already mentioned, you must have the perl executable and you may
+need C and C++ compilers in your search path. For building base you
+also must have echo in your search path. For Unix host builds you
+also need ln, cpp, cp, rm, mv, and mkdir in your search path and
+/bin/chmod must exist. On some Unix systems you may also need ar and
+ranlib in your path, and the C compiler may require as and ld in
+your path. On solaris systems you need uname in your path.
+
+**LD\_LIBRARY\_PATH**
+R3.15 shared libraries and executables normally contain the full
+path to any libraries they require. However, if you move the EPICS
+files or directories from their build-time location then in order
+for the shared libraries to be found at runtime LD\_LIBRARY\_PATH
+must include the full pathname to
+$(INSTALL\_LOCATION)/lib/$(EPICS\_HOST\_ARCH) when invoking
+executables, or some equivalent OS-specific mechanism (such as
+/etc/ld.so.conf on Linux) must be used. Shared libraries are now
+built by default on all Unix type hosts.
+
+#### Do site-specific build configuration
+
+**Site configuration**
+To configure EPICS, you may want to modify the default definitions
+in the following files:
+
+```
+ configure/CONFIG_SITE Build choices. Specify target archs.
+ configure/CONFIG_SITE_ENV Environment variable defaults
+ configure/RELEASE TORNADO2 full path location
+```
+
+**Host configuration**
+To configure each host system, you may override the default
+definitions by adding a new file in the configure/os directory with
+override definitions. The new file should have the same name as the
+distribution file to be overridden except with CONFIG in the name
+changed to CONFIG\_SITE.
+
+```
+ configure/os/CONFIG.<host>.<host> Host build settings
+ configure/os/CONFIG.<host>.Common Host common build settings
+```
+
+**Target configuration**
+To configure each target system, you may override the default
+definitions by adding a new file in the configure/os directory with
+override definitions. The new file should have the same name as the
+distribution file to be overridden except with CONFIG in the name
+replaced by CONFIG\_SITE. This step is necessary even if the host
+system is the only target system.
+
+```
+ configure/os/CONFIG.Common.<target> Target common settings
+ configure/os/CONFIG.<host>.<target> Host-target settings
+```
+
+#### Build EPICS base
+
+After configuring the build you should be able to build EPICS base
+by issuing the following commands in the distribution's root
+directory (base):
+
+```
+ gnumake clean uninstall
+ gnumake
+```
+
+The command "gnumake clean uninstall" will remove all files and
+directories generated by a previous build. The command "gnumake"
+will build and install everything for the configured host and
+targets.
+
+It is recommended that you do a "gnumake clean uninstall" at the
+root directory of an EPICS directory structure before each complete
+rebuild to ensure that all components will be rebuilt.
+
+### Example application and extension
+
+A perl tool, makeBaseApp.pl is included in the distribution file. This
+script will create a sample application that can be built and then
+executed to try out this release of base.
+
+Instructions for building and executing the 3.15 example application
+can be found in the section "Example Application" of Chapter 2,
+"Getting Started", in the "IOC Application Developer's Guide" for this
+release. The "Example IOC Application" section briefly explains how to
+create and build an example application in a user created <top>
+directory. It also explains how to run the example application on a
+vxWorks ioc or as a process on the host system. By running the example
+application as a host-based IOC, you will be able to quickly implement
+a complete EPICS system and be able to run channel access clients on
+the host system.
+
+A perl script, makeBaseExt.pl, is included in the distribution file.
+This script will create a sample extension that can be built and
+executed. The makeBaseApp.pl and makeBaseExt.pl scripts are installed
+into the install location bin/<hostarch> directory during the base
+build.
+
+### Multiple host platforms
+
+You can build using a single EPICS directory structure on multiple
+host systems and for multiple cross target systems. The intermediate
+and binary files generated by the build will be created in separate
+subdirectories and installed into the appropriate separate host/target
+install directories. EPICS executables and perl scripts are installed
+into the `$(INSTALL_LOCATION)/bin/
If a macro EPICS_NO_CALLBACK is defined, then callback.h will no longer (re)define CALLBACK. +The name 'CALLBACK' is used by the WIN32 API, and redefinition in callback.h cause errors +if some windows headers are later included. +
+ +Code which defines EPICS_NO_CALLBACK, but still wishes to use callbacks, should use +the alternate name 'epicsCallback' introduced in 3.15.6, 3.16.2, and 7.0.2. +It is also possible, though not encouraged, to use 'struct callbackPvt' +which has been present since the callback API was introduced.
+Bruno Martins reported a problem with the CA client library at shutdown in a
diff --git a/modules/database/src/ioc/as/asDbLib.h b/modules/database/src/ioc/as/asDbLib.h
index 65c4c6f59..1e0f6756e 100644
--- a/modules/database/src/ioc/as/asDbLib.h
+++ b/modules/database/src/ioc/as/asDbLib.h
@@ -16,7 +16,7 @@
#include "shareLib.h"
typedef struct {
- CALLBACK callback;
+ epicsCallback callback;
long status;
} ASDBCALLBACK;
diff --git a/modules/database/src/ioc/db/callback.c b/modules/database/src/ioc/db/callback.c
index e1f1d45a2..bbd798ed4 100644
--- a/modules/database/src/ioc/db/callback.c
+++ b/modules/database/src/ioc/db/callback.c
@@ -216,7 +216,7 @@ static void callbackTask(void *arg)
epicsEventMustWait(mySet->semWakeUp);
while ((ptr = epicsRingPointerPop(mySet->queue))) {
- CALLBACK *pcallback = (CALLBACK *)ptr;
+ epicsCallback *pcallback = (epicsCallback *)ptr;
if(!epicsRingPointerIsEmpty(mySet->queue))
epicsEventMustTrigger(mySet->semWakeUp);
mySet->queueOverflow = FALSE;
@@ -317,7 +317,7 @@ void callbackInit(void)
}
/* This routine can be called from interrupt context */
-int callbackRequest(CALLBACK *pcallback)
+int callbackRequest(epicsCallback *pcallback)
{
int priority;
int pushOK;
@@ -347,7 +347,7 @@ int callbackRequest(CALLBACK *pcallback)
return 0;
}
-static void ProcessCallback(CALLBACK *pcallback)
+static void ProcessCallback(epicsCallback *pcallback)
{
dbCommon *pRec;
@@ -358,14 +358,14 @@ static void ProcessCallback(CALLBACK *pcallback)
dbScanUnlock(pRec);
}
-void callbackSetProcess(CALLBACK *pcallback, int Priority, void *pRec)
+void callbackSetProcess(epicsCallback *pcallback, int Priority, void *pRec)
{
callbackSetCallback(ProcessCallback, pcallback);
callbackSetPriority(Priority, pcallback);
callbackSetUser(pRec, pcallback);
}
-int callbackRequestProcessCallback(CALLBACK *pcallback,
+int callbackRequestProcessCallback(epicsCallback *pcallback,
int Priority, void *pRec)
{
callbackSetProcess(pcallback, Priority, pRec);
@@ -374,11 +374,11 @@ int callbackRequestProcessCallback(CALLBACK *pcallback,
static void notify(void *pPrivate)
{
- CALLBACK *pcallback = (CALLBACK *)pPrivate;
+ epicsCallback *pcallback = (epicsCallback *)pPrivate;
callbackRequest(pcallback);
}
-void callbackRequestDelayed(CALLBACK *pcallback, double seconds)
+void callbackRequestDelayed(epicsCallback *pcallback, double seconds)
{
epicsTimerId timer = (epicsTimerId)pcallback->timer;
@@ -389,7 +389,7 @@ void callbackRequestDelayed(CALLBACK *pcallback, double seconds)
epicsTimerStartDelay(timer, seconds);
}
-void callbackCancelDelayed(CALLBACK *pcallback)
+void callbackCancelDelayed(epicsCallback *pcallback)
{
epicsTimerId timer = (epicsTimerId)pcallback->timer;
@@ -398,7 +398,7 @@ void callbackCancelDelayed(CALLBACK *pcallback)
}
}
-void callbackRequestProcessCallbackDelayed(CALLBACK *pcallback,
+void callbackRequestProcessCallbackDelayed(epicsCallback *pcallback,
int Priority, void *pRec, double seconds)
{
callbackSetProcess(pcallback, Priority, pRec);
diff --git a/modules/database/src/ioc/db/callback.h b/modules/database/src/ioc/db/callback.h
index 720cf337d..a77a888f9 100644
--- a/modules/database/src/ioc/db/callback.h
+++ b/modules/database/src/ioc/db/callback.h
@@ -26,7 +26,7 @@ extern "C" {
/*
* WINDOWS also has a "CALLBACK" type def
*/
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(EPICS_NO_CALLBACK)
# ifdef CALLBACK
# undef CALLBACK
# endif /*CALLBACK*/
@@ -44,7 +44,9 @@ typedef struct callbackPvt {
void *timer; /*for use by callback itself*/
}epicsCallback;
+#if !defined(EPICS_NO_CALLBACK)
typedef epicsCallback CALLBACK;
+#endif
typedef void (*CALLBACKFUNC)(struct callbackPvt*);
@@ -69,16 +71,16 @@ typedef struct callbackQueueStats {
epicsShareFunc void callbackInit(void);
epicsShareFunc void callbackStop(void);
epicsShareFunc void callbackCleanup(void);
-epicsShareFunc int callbackRequest(CALLBACK *pCallback);
+epicsShareFunc int callbackRequest(epicsCallback *pCallback);
epicsShareFunc void callbackSetProcess(
- CALLBACK *pcallback, int Priority, void *pRec);
+ epicsCallback *pcallback, int Priority, void *pRec);
epicsShareFunc int callbackRequestProcessCallback(
- CALLBACK *pCallback,int Priority, void *pRec);
+ epicsCallback *pCallback,int Priority, void *pRec);
epicsShareFunc void callbackRequestDelayed(
- CALLBACK *pCallback,double seconds);
-epicsShareFunc void callbackCancelDelayed(CALLBACK *pcallback);
+ epicsCallback *pCallback,double seconds);
+epicsShareFunc void callbackCancelDelayed(epicsCallback *pcallback);
epicsShareFunc void callbackRequestProcessCallbackDelayed(
- CALLBACK *pCallback, int Priority, void *pRec, double seconds);
+ epicsCallback *pCallback, int Priority, void *pRec, double seconds);
epicsShareFunc int callbackSetQueueSize(int size);
epicsShareFunc int callbackQueueStatus(const int reset, callbackQueueStats *result);
epicsShareFunc void callbackQueueShow(const int reset);
diff --git a/modules/database/src/ioc/db/dbNotify.c b/modules/database/src/ioc/db/dbNotify.c
index 794672a55..e25ce4aa0 100644
--- a/modules/database/src/ioc/db/dbNotify.c
+++ b/modules/database/src/ioc/db/dbNotify.c
@@ -69,7 +69,7 @@ typedef struct notifyPvt {
ELLNODE node; /*For free list*/
long magic;
short state;
- CALLBACK callback;
+ epicsCallback callback;
ELLLIST waitList; /*list of records for current processNotify*/
short cancelWait;
short userCallbackWait;
@@ -86,7 +86,7 @@ typedef struct notifyGlobal {
static notifyGlobal *pnotifyGlobal = 0;
-static void notifyCallback(CALLBACK *pcallback);
+static void notifyCallback(epicsCallback *pcallback);
#define ellSafeAdd(list,listnode) \
{ \
@@ -270,7 +270,7 @@ static void processNotifyCommon(processNotify *ppn, dbCommon *precord, int first
callDone(precord, ppn);
}
-static void notifyCallback(CALLBACK *pcallback)
+static void notifyCallback(epicsCallback *pcallback)
{
processNotify *ppn = NULL;
dbCommon *precord;
diff --git a/modules/database/src/ioc/db/dbScan.c b/modules/database/src/ioc/db/dbScan.c
index 9224ed504..1904082e7 100644
--- a/modules/database/src/ioc/db/dbScan.c
+++ b/modules/database/src/ioc/db/dbScan.c
@@ -109,7 +109,7 @@ static char *priorityName[NUM_CALLBACK_PRIORITIES] = {
/* EVENT */
typedef struct event_list {
- CALLBACK callback[NUM_CALLBACK_PRIORITIES];
+ epicsCallback callback[NUM_CALLBACK_PRIORITIES];
scan_list scan_list[NUM_CALLBACK_PRIORITIES];
struct event_list *next;
char eventname[1]; /* actually arbitrary size */
@@ -120,7 +120,7 @@ static epicsMutexId event_lock;
/* IO_EVENT*/
typedef struct io_scan_list {
- CALLBACK callback;
+ epicsCallback callback;
scan_list scan_list;
} io_scan_list;
@@ -141,9 +141,9 @@ static void periodicTask(void *arg);
static void initPeriodic(void);
static void deletePeriodic(void);
static void spawnPeriodic(int ind);
-static void eventCallback(CALLBACK *pcallback);
+static void eventCallback(epicsCallback *pcallback);
static void ioscanInit(void);
-static void ioscanCallback(CALLBACK *pcallback);
+static void ioscanCallback(epicsCallback *pcallback);
static void ioscanDestroy(void);
static void printList(scan_list *psl, char *message);
static void scanList(scan_list *psl);
@@ -448,7 +448,7 @@ int scanpiol(void) /* print pioscan_list */
return 0;
}
-static void eventCallback(CALLBACK *pcallback)
+static void eventCallback(epicsCallback *pcallback)
{
scan_list *psl;
@@ -944,7 +944,7 @@ static void spawnPeriodic(int ind)
epicsEventWait(startStopEvent);
}
-static void ioscanCallback(CALLBACK *pcallback)
+static void ioscanCallback(epicsCallback *pcallback)
{
ioscan_head *piosh;
int prio;
diff --git a/modules/database/src/ioc/db/dbTest.c b/modules/database/src/ioc/db/dbTest.c
index 0daafc436..e23220503 100644
--- a/modules/database/src/ioc/db/dbTest.c
+++ b/modules/database/src/ioc/db/dbTest.c
@@ -56,7 +56,7 @@ typedef struct msgBuff TAB_BUFFER;
# define MIN(x,y) (((x) < (y)) ? (x) : (y))
#endif
#ifndef MAX
-# define MAX(x,y) (((x) < (y)) ? (x) : (y))
+# define MAX(x,y) (((x) > (y)) ? (x) : (y))
#endif
/* Local Routines */
diff --git a/modules/database/src/ioc/db/menuAlarmStat.dbd b/modules/database/src/ioc/db/menuAlarmStat.dbd.pod
similarity index 84%
rename from modules/database/src/ioc/db/menuAlarmStat.dbd
rename to modules/database/src/ioc/db/menuAlarmStat.dbd.pod
index e8d7f1ced..78debf8c5 100644
--- a/modules/database/src/ioc/db/menuAlarmStat.dbd
+++ b/modules/database/src/ioc/db/menuAlarmStat.dbd.pod
@@ -7,6 +7,17 @@
# and higher are distributed subject to a Software License Agreement found
# in file LICENSE that is included with this distribution.
#*************************************************************************
+
+=head1 Menu menuAlarmStat
+
+This menu defines the possible alarm statuses that EPICS records can exhibit
+which is used for C
+
+
+
+=end html
+
+=head2 Parameter Fields
+
+=head3 Scanning Parameters
+
+The compression record has the standard fields for specifying under what
+circumstances the record will be processed. These fields are listed in
+L
+
+=end html
+
+B
+
+=end html
+
+
+=head3 Operator Display Parameters
+
+These parameters are used to present meaningful data to the operator. They
+display the value and other parameters of the record either textually or
+graphically.
+
+=fields EGU, HOPR, LOPR, PREC, NAME, DESC
+
+The EGU field should be given a string that describes the value of VAL, but is
+used whenever the C<<< get_units >>> record support routine is called.
+
+The HOPR and LOPR fields only specify the upper and lower display limits for
+VAL, HIHI, HIGH, LOLO and LOW fields.
+
+PREC controls the floating-point precision whenever C<<< get_precision >>> is
+called, and the field being referenced is the VAL field (i.e., one of the values
+contained in the circular buffer).
+
+See L
+
+
+
+=end html
+
+=head2 Record Support
+
+=head3 Record Support Routines (compressRecord.c)
+
+=head4 init_record
+
+ long (*init_record)(struct dbCommon *precord, int pass)
+
+Space for all necessary arrays is allocated. The addresses are stored in the
+appropriate fields in the record.
+
+=head4 process
+
+ long (*process)(struct dbCommon *precord)
+
+See L
+
+=end html
+
+=recordtype longin
+
+=cut
+
+recordtype(longin) {
+
+=head2 Parameter Fields
+
+The fields in this record fall into the following categories:
+
+=over
+
+=item * L
+
+=end html
+
+=head2 Record Support
+
+=head3 Record Support Routines
+
+=head4 init_record
+
+This routine initializes SIMM with the value of SIML if SIML type is CONSTANT
+link or creates a channel access link if SIML type is PV_LINK. SVAL is likewise
+initialized if SIOL is CONSTANT or PV_LINK.
+
+This routine next checks to see that device support is available and a device
+support read routine is defined. If either does not exist, an error message is
+issued and processing is terminated.
+
+If device support includes C
+
+=end html
+
+=head2 Device Support
+
+=head3 Fields Of Interest To Device Support
+
+Each long input record must have an associated set of device support routines.
+The primary responsibility of the device support routines is to obtain a new
+input value whenever read_longin is called. The device support routines are
+primarily interested in the following fields:
+
+=fields PACT, DPVT, UDF, NSEV, NSTA, VAL, INP
+
+=head3 Device Support Routines
+
+Device support consists of the following routines:
+
+=head4 long report(int level)
+
+This optional routine is called by the IOC command C
+
+=end html
+
+=recordtype longout
+
+=cut
+
+recordtype(longout) {
+
+=head2 Parameter Fields
+
+The fields in this record fall into the following categories:
+
+=over
+
+=item * L