EPICS Release baseR3.13.0.beta12

June 15, 1998

All major functionality that will be in R3.13 is now in place. It has been build on solaris, sunos, HPUX, alpha, SG, and winXX. This release is still called a beta release but will become 3.13.1 as soon as it has been used on a few production systems (bug fixes will be made if necessary)

The Application Developer's Guide is a major revision of the 3.12 edition. The latest version is for beta12 base release.  It is available in pdf (adobe acrobat reader) and in postscript. The pdf format is nice for online viewing and postscript for generating a hard copy.

LANL has a revision of the Record Reference Manual available. See the LANL EPICS documentation.

The document "EPICS IOC Applications: Building and Source/Release Control" provides guidlines for developing applications with 3.13.

Changes between beta11 and beta12

IOC Applications: Building

The following explains changes that need to be made to existing applications that followed the EPICS IOC Applications: Building and Source/Release Control. guidelines. See the new version of this manual for details.

Before switching applications to beta12 it is STRONGLY recommended that you execute:

cd <top>
gnumake clean uninstall

Changes to <top>/config:

Remove the following lines:
ifndef T_A
endif #ifndef T_A
If desired add a definition for TEMPLATE_TOP
These no longer exists in base.  Replace your version with the version from:
Remove the rules for creating soft  links.
makeDbDepends.pl, makeIocCdCommands.pl, replaceVAR.pl
Copy the versions from  <base>/templates/makeBaseApp/top/config
Remove this file


Changes to xxxApp/src

Move the following definitions from Makefile.Vx to Makefile.Host:

Changes to xxxApp/Db

Rules for DBFROMTEMPLATE and INDDBFROMTEMPLATE no longer exist. See the new documentation of makeBaseApp for details of what the make rules are for databases.

Changes to iocBoot and iocBoot/iocxxx

iocBoot no longer needs a generated nfs.cmd file

iocBoot/iocxxx no longer contains soft links. Instead the following is done:



This did not work properly if DOL  is a channel access link that fails.


Most locking semaphores have been changed from semBCreate to semMCreate with the options :

A performance test showed that executing

in a 25MHZ mv167 took  (4.4 ,7.8) microseonds when (semBCreate,semMCreate) was used. The extra options as well as allowing a task to lock recursively are worth the difference in performance.

Task Priorities

The priority of the channel access client for database links was changed from 100 to 68, which makes it lower than all scan tasks but higher than the sequencer or any channel access tasks.


This was changed to print numbers with precision<=8 and magnitude <1e16 in fixed format with up to 3 digits after the decimal point. As an example if PREC=1 and a number is 363000000.1 previously it was convetred to


Now it is converted to


All you RF folks can cheer.

Access Security

Previously it was possible to crash an IOC if access security was restarted after iocInit. This is now fixed. Two major changes were made.
  1. asCaTask is no longer deleted and restarted. Instead it just clears all channels and than adds the new channels
  2. The locking mechanism was changed and made more roibust and easier to understand.
  3. Fixed bug that caused asRegisterClientCallback to fail on UNIX.
  4. asLib_lex.l changed to allow more characters(like dbLoadxxx)
  5. Fixed bug that could cause deadlock when an ASG field is changed at run time.
Access Security now supports macro substitutions. A new vxWorks shell command is:
  See the Application developer's Guide for details about access security.

tsdefs.h and tsSubr.c

tsTextToStamp and tsTimeTextToStamp no longer modify the pointer or the string referenced by pText.

The nextField routines used by tsSubr were moved inside tsSubr.c  and made static routines.


Checked for Y2K complience. It turns out it was even ok when NTP time overflows in 2036. However it was modified so that no overflows should occur while converting between NTP, UNIX, and EPICS epochs. In addition the conversion of fractions of a second to nanaoseconds was changed and formatting was changed so that interesting code does not run off right side of page. Hopefully EPICS base is now fine for Y2K. In fact it should be fine (as far as time is converned) until the Unix epoch overflows a 32 unsigned integer in the year 2106.


Removed from base.


Base now builds with either vxWorks 5.2 or vxWorks 5.3. The default is to build vxWorks 5.3. In CONFIG_COMMON a new definition "VX_IS_TORNADO = 1" is present. If this statemant is commented out then vxWorks 5.2 is assumed.


Only the perl version is now supported. Due to encouragement from Rozelle Wright (LANL) and the developers at BESSY, makeBaseApp now uses template files instead of being one huge ugly perl script.  Ralph Lange (BESSY) made major changes to makeBaseApp. It supports two sets of templates provided with base (simple and example) as well as templates stored elsewhere. Thus each site can add new sets of template files.

See the new WWW documentation on Application Source Release for details


The include path now supports the unix convention that an empty directory name means the current directory. Thus the following are OK
-I nnn::mmm    # Current directory is between nnn and mmm
-I :nnn        # Current directory is first
-I nnn:        # Current directory is last
The lex grammer was changed so that quoted strings can contain any ascii character except a quote. A quote itself can be given as the escape sequence \". This same change was made to dbLoadRecords and dbLoadTemplates.

For all fields in a .db file, a non null string is considered as not the default.

For winNT the path seperator is a ;

Field attributes (psuedo fields) are now supported. In particular RTYP (record type) and VERS (version) are now supported. In addition a new request type DBR_CLASS is supported. See Application Developer's guide for details.

Runtime database access



Changed to support initHookRegister. See Application Developer's Guide for details. The 3.13.0beta11 version explains the new method. Note that to use the new the startup file must contain the statement: If you have your own version of initHooks.c it should be changed to support the new features. At a minumum the statement
  must be changed to
    void initHooks( initHookState state)


The no alarm string changed from "" to "NO_ALARM"

Linear Conversion for ai and ao records:

Before beginning it should be stated that the previous linear conversion method is still valid.

The following, which is designed by Benjamin Franksen at BESSY, is now the recommended method:

A new field EOFF exists.  The new linear conversion algorithm is now

AVAL is the raw value adjusted by ASLO and AOFF.

Thus device support should now compute ESLO and EOFF instead of ESLO and ROFF.

For example let an ADC be a 16 bits adc with raw values between -32767 and 32767.


RISC architectures

Some changes were made to build on RISC architectures. A new include and source file (adjustment.h and adjustment.c) were created to aid this support. We can thank Peregrine McGehee for this new support.


This is a replacement for the old code that implemented errMessage, errPrintf, and epicsPrintf. It provides for multiple system wide error loggers. The existing iocLog has been modified to use the new code. The new code supports the old calls and adds some new calls. See Application Developer's guide  for details.


Changed Scl to Slc wherever this occured. Added support for signed 16 bit analog values. Stephanie Allison (SLAC) made these changes.


Removed from base.


Major rewrite of this routine. It computes the cpu usage via a low priority taks rather than using spy. It reports file descriptor usage rather than tcp connections (this is what is actually measures). The format of the INP ,and OUT fields has changed since the previous version.  The new device definitions are: The INP fields now have the form The OUT fields now have the form The source file has comments showing a sample database.


This has been drastically changed. Look at <base>/src/dev/symbDev/README for details.

Changes between beta4 and beta11

Support for win95 and winNT

Epics base now builds on windows platforms

GDD and Portable Channel Access Server

The gdd library and the portable channel access server now build on all platforms, except SGI and cygwin32, listed above. This also means that C++ is supported on these platforms.

Application Developer's Guide

The chapter "Building IOC Applications" is gone. It is replaced by the document "EPICS IOC Applications, Building and Source/Release Control". Other changes are minor. Following is a brief list: NOTE: The initHooks described in the appDevGuide is not in beta11. In beta11 initHooks is the same as previous releases. The new version will be in the next release.


Compiler warning messages:

All of base except drv/old is now being built with Most warning messages have now been eliminated. The remaining messages should not be removed without looking hard at code.


get_control_double routine returned incorrect values for fields INDX and NELM.


This is now renamed devVXStats. The new device definitions are:
device(ai,VME_IO,devAiVXStats,"VX stats")
device(ao,VME_IO,devAoVXStats,"VX stats")
Thus if an application has an old base.dbd and baseLIBOBJS including definitions for this device support they must be modified.

SysMon device support

This is removed from base. It is for APS designed and build VME create system monitoring. The support code is available from APS if needed. NOTE: In some beta releases baseLIBOBJS, had an include for devSysmon.o. Applications using an old version of baseLIBOBJS will not build until this statement is deleted.


The enums for menus had a comma after last item.


recGblInitConstantLink for sgl was referencing wrong field.


This did not properly support multiple clients in multi-thread environment.


Modified to be faster.


Use maxCards from module_types.h instead of a #define


Allow CALC to be 40 characters. Increase rpbuf from 184 to 200


Add call to refresh_bits.


Bx becomes no prompt for mbbi and prompt for mbbo. It was the reverse before.


A new record type that replaces old wait record. It is like a calc record with an output and a delay. It makes the wait record obsolete.


dbGetPdbAddrFromLink is a new routine. It returns NULL for all except LINK_DB links, for which it returns the address of the associated DB_ADDR structure.

escape characters in database files

dbLoadDatabase, dbLoadRecords, and dbLoadTemplate all allow the standard C escape sequences in quoted strings. For example a string can contain: "\x00 \27 \t" Thus these sequences pass though the lexical analyzer .


A new routine in libCom. It is used to translate escape sequences. It is defined in file epicsString.h. It typical place to use this is on parm fields that contain escape sequences like "\x00 \27 \t".

Slow booting

iocs with big databases were taking a long time to boot. It was discovered that allocating and then freeing small amounts of memeory frequently resulted in a VERY long memory free list. This is now fixed.

boRecord, mbboRecord

init_record now initialized the RVAL field.


Benjamin Franksen at BESSY reported a serious bug in the routine ProcessCallback (not used in base). It has been fixed.

CALC fields

postfix and calcPerform (used by calcRecord) have been changed so that a 0 byte now ends the postfix expression. Also if postfix detects an illegal expression it generates a 0 length postfix string. When calcPerform is given a 0 length string it returns a error status. Thus calcRecord no longer causes the IOC to crash if an illegal CALC fields is loaded.


Many other minor problems, bugs, etc. were fixed.

Notes for Release 3.13 of EPICS Base

For Release 3.13 major changes have been made to EPICS base. The IOC Application Developer's Guide has been extensively modified and now describes release 3.13. If you are upgrading for a 3.12.xxx or earlier release you must obtain and read the new App Dev Guide.

In porting EPICS to multiple architectures, the previous method of using utilities to convert the database definition files to a binary file (default.dctsdr) caused problems. The problem is that the binary file is created on one architecture and used on another. This has worked so far for sun4 and hp hosts combined with motorola 68xxx processors. As support for more host and more ioc architectures is developed problems are appearing. This paper describes changes that solve the problems.

Because the changes result in extensive changes to database access, other changes are also made. The file syntax is changed. The internal database structures are simplified and also changed to make it easier to support runtime add/delete of record types and record instances.


Backward Compatibility


Overview of new database support

EPICS defines a set of database file formats. In addition any of these files can contain include statements. For each ioc, the application developer will create a set of files specifying the record types, devices, and drivers needed for that ioc. Normally a master file will be created which consists of include statements that bring in record, device, and driver definitions. Default configurations can be provided for new users or for particular applications.

Database configuration and utility tools access the database via the static database access library. This library reads the files. It provides routines for reading the information in the database and for creating and modifying record instances. Database definition files can be read incrementally.

Other database configuration tools (capfast, relational database systems, object oriented databases, etc.) can also be used as long as they generate record instances in the format described below. In this case, however, it is still necessary to generate the other files because they are needed by database access and for record and device support modules.

Tools are provided that generate C code from the database files. Header files are generated for menu and record type definitions. These header files are used by record and device support. In addition the record type definitions contain code which computes field offsets and sizes and record sizes. This code is compiled by the same cross compiler that is used to compile other ioc code. Thus cross platform compatibility is achieved.

In order to initialize an ioc, all files needed by that ioc have to be loaded. It is also necessary to load the record/device/driver support modules.

Everything is designed so that the following are possible:

An additional feature is that, for database configuration tools, record instance numeric fields and menu fields are stored as character strings. This solves the following problems. Another feature is is that it is now possible to distinguish link constants with a value of 0 from links that have never been given a value.

Other changes have been made while the opportunity was available.

Database Definition File format

Formats are defined for the following: See the Application Developer's Guide for details.

The menu choices replace the existing global, record, and conversion choices. The global and record choices are very similar and thus are easy to combine. The method of handling the old conversion choices is described below. That section also describes the breakpoint tables.

The record type description format has been completely changed. It now has a "real" syntax. It should be MUCH easier to generate new definitions.

The device choice and driver support definitions are defined so that it is easy to provide incremental definitions.

The record instance format is an extension of the 3.12.beta13 and later GDCT .db format.

Path and include statements are supported. This provides a powerful tool for combining definitions from many sources. The path is a unix style path, i.e. a colon separated list of directory names.

default.dctsdr conversion tools

NOTES The following tools are provided: For all utilities the required database definition files are generated from a dctsdr file from a previous epics release. A dctsdr file can be specified or else the utilities can be run in a directory which contains default.dctsdr (or a soft link with that name). sdr2recordtype also requires the header file generated by a previous epics release.

Conversions - replacement for DBF_CVTCHOICE

Let's briefly review database conversion, i.e. the LINR field for ai and ao records.

The allowed conversions are:

  1. None
  2. Linear
  3. Breakpoint Tables
The main complication results from the breakpoint tables. Previously EPICS handled breakpoint tables as follows:

The user prepares files in one of two formats: The first is just a list of "raw value, eng units value". The second format is a file with a header line followed by a table of raw data values that represent data at equally spaced engineering unit values. In either case the ascii data is converted to an internal binary format containing breakpoint tables. This data is part of default.dctsdr.

Here is how breakpoint table are now handled.

One other comment needs to be made about conversions. The Allen Bradley device support for the IXE module uses the LINR field in a non standard way. This was a mistake but compatibility must be maintained. Thus menuConvert contains a lot of choices used only by the IXE device support.

Converting existing applications

Database Configuration Tools

  • DCT - Rather than making major changes to DCT, a TCL/TK replacement has been written. The executable is named DCT313.
  • GDCT - A new version is provided that supports 3.13. The executable is named GDCT313.
  • Application Source/Release Control

    At the present time There are at least three Application Source/Release Control Systems in active use. The old technique of having cat_ascii and replace_ascii directories no longer work. In addition makesdr no longer exists. The new system offers developers far more flexibility but it also means that each Application Source/Release Control system has to be modified to take advantage of the new capabilities. Again the changes in RULES and makeBaseApp should make this task easier.

    The document "EPICS IOC Applications: Building and Source/Release Control" describes a utility makeBaseApp which can be used for small applications. It also provides guidlines that can be used for large applications.

    Locally developed Record/Device support

    Record Instance Definitions

    Convert to proper format

    All record instances must be capable of being loaded into an ioc via dbLoadDatabase, dbLoadRecords, or dbLoadTemplate. This is the same format that dbLoadRecords and dbLoadTemplate used in 3.12 releases. Note that if any files contain the statements:
            database(x) { nowhere() {
            database(x) {
    These statements must be removed. They were in pre 3.12 releases.

    CONSTANT Links with value "0"

    Release 3.13 is now capably of distingushing between a null link (a link that is not given any value at all) and a constant link with the value 0. This cause problems for some old record instance files. For example if a record instance is defined as:
            record(fanout,name) {
    Such definitions can be fixed by either completly removing the link definition or changing the value from "0" to "".

    here is a complete list of record types and fields that may have this problem:

    A good way to find these problems is to use grep. For example:
            grep SELL */*.db
    This assumes that you are in directory that contains subdirectorys containing .db files.

    IOC Startup files

    The command dbLoad is no longer supported. The new method is to issue one or more dbLoadDatabase commands and any combination of dbLoadRecords and dbLoadTemplate commands.

    Other Release Notes

    IOC Test routines

    Many changes have been made to the EPICS ioc test routines, i.e., routines given to the vxWorks shell. Please read the chapter "IOC Test Facilities" in the Application Developer's Guide for details.

    Changes to Record and Device Support

    Make rules and config files

    The config environment has been extensively changed. BASE now has its own set of config files. Extensions will be able to use the base config files (for the version of base it is built against) and add it's own definitions. Changes to extensions will come at a future time.

    GNU C++ for base

    It is now possible to compile 3.13 EPICS base with the gnu C and C++ compilers. A C++ compiler that properly supports templates is required to build the new ca server and the gdd library.

    log server

    Thanks to William Lupton at KECK the log server will now (under the latest EPICS 3.13) obtain a new directory for the log file in response to SIGHUP.

    CA repeater fix

    Thanks to Kim Gillies, Bret Goodrich, and others at NOAO a problem has been discovered and fixed in the 3.12 CA repeater under solaris.

    Portable CA server

    A new CA server C++ class library is available. The server library is in libcas.a. The API is described in casdef.h. Doc is in progress. An example server tool can be found at base/src/cas/example. The server has been tested under sunos4 and solaris. A multi-threaded version of the new server for vxWorks is in progress.

    Macro Substitution Library

    The macro substitution library discussed in tech-talk is now part of epics base. Thus was contributed by Bill Lupton. The static database library uses this library. dbLoadRecords and dvbLoadTemplate also use it.

    VXI Resource Manager fix

    Thanks to Ric Claus of SLAC a bug has been isolated in the VXI resource manager.
    Symptom: correct slot isnt located when EPICS_VXI_LA_BASE is set to something other than zero.

    Access Security

    If asSetFile has been set in a startup file and access security initialization fails, then iocInit returns -1 so that startup file does not finish.


    On Unix this now calls fprintf(stderr instead of printf


    This now calls printf instead of epicsPrintf to prevent deadlocks.

    Native type for DBF_USHORT

    Formerlly old database access, which does not have unsigned short called the native type DBR_FLOAT. It now calls it DBF_LONG

    Allen Bradley Driver

    Analog Output Block Transfers were being requested too frequently

    If link_status command fails (3 times in succession) adapters are now immediatly declared down.

    For btRead and btWrite, The driver now enforces a timeout of 5 seconds which is 1 second more than scanner itself enforces. This is so that if scanner throws away a BT request it will still timeout.

    For btRead and btWrite is is no longer permissible to issue a new btRead or btWrite from tha callback routine.

    The on line doc has the following two changes:


    Support has been added by LBL. It still needs to be ansified.

    New options for links


  • A forward link now works between IOCs but only if the field is PROC. When recGblFwdLink is executed, a 1 is written.
  • OUTLINK new option CA (In addition to PP and NPP)

  • CA means always make it channel access link
  • INLINK new options CA CP CPP (In addition to PP and NPP)
  • dbAccess (dbGetField dbPutField) make sure that link field strings are not longer than 39 characters. They allow M for MS and N for NMS

    callback and scan task names

    The task names have been changed to make them unique


    If the strlen of the new field is >= field_size an error is returned.

    event scanned records

    Multiple priorities are now supported.
    WARNING: Default PRIO is low thus old event scanned records may be executed at a lower priority then previous release.

    Allen Bradley Stepper Motor Support (Ric Claus SLAC)

    Support for the allen bradley stepper motor is available. See the APS EPICS Hardware Support page for details.


    INITHOOKafterCaLinkInit1 is replaced by INITHOOKafterCaLinkInit
    INITHOOKafterCaLinkInit2 no longer exists