Argonne National Laboratory

Experimental Physics and
Industrial Control System

1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  <20152016  2017  Index 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  <20152016  2017 
<== Date ==> <== Thread ==>

Subject: EPICS V4 on Windows
From: <freddie.akeroyd@stfc.ac.uk>
To: <tech-talk@aps.anl.gov>
Date: Mon, 12 Jan 2015 12:08:42 +0000
Hi,

I downloaded and compiled EPICS v4.4.0 on Windows (Visual Studio 2010/Windows 7/base 3-14-12-4) and exampleCPP/HelloWorld ran OK when compiled Release, but I recall having a crash when running in Debug mode. I say "recall" as I've subsequently gone back and now can't reproduce my original problem! However it set me on the path of removing some of the C4275 (non-dll-interface used as basis for dll-interface) and LNK4217 (locally defined symbol imported) warnings output during the debug build. I enclose the changes I made as, though not necessary for building with the Microsoft Compiler, they allow the code to be compiled under both MinGW and Cygwin too. 

The MinGW build has a couple of small issues remaining. During compile there are various warning about "%z" or "%lli" not being supported in printf/sprintf, and pvaSvr.dll fails to link with:

    dbUtil.o:dbUtil.cpp:(.text+0x1147): undefined reference to `_imp__epicsAlarmConditionStrings'

dbPv/caMonitor.cpp includes <alarmString.h> and dbPv/dbUtil.cpp includes <alarm.h>  -  a quick workaround to allow building is to change the "epicsShareExtern" to just "extern" in <epics base>/alarm.h  so during linking the global instance defined in dbPv/caMonitor.cpp via <alarmString.h> is matched. I'm guessing by the presence of epicsShareExtern in <alarm.h> clients should be getting these strings from <epics base> itself, but I couldn't see them exported anywhere by base?

Regards,

Freddie
Index: pvaSrv/testTop/dbPv/src/Makefile
===================================================================
--- pvaSrv/testTop/dbPv/src/Makefile	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvaSrv/testTop/dbPv/src/Makefile	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -31,7 +31,7 @@
 testDbPvSupport_SRCS += bigstringinRecord.c
 testDbPvSupport_SRCS += waitRecord.c
 testDbPvSupport_SRCS += testDbPv.cpp
-testDbPvSupport_LIBS_WIN32 += pvAccess pvData dbIoc Com
+testDbPvSupport_LIBS += pvAccess pvData dbIoc Com
 
 #=============================
 # Build an IOC application
Index: pvaSrv/src/dbPv/dbPvProvider.cpp
===================================================================
--- pvaSrv/src/dbPv/dbPvProvider.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvaSrv/src/dbPv/dbPvProvider.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -26,6 +26,7 @@
 #include <pv/noDefaultMethods.h>
 #include <pv/lock.h>
 
+#define epicsExportSharedSymbols
 #include "dbPv.h"
 #include "caSecurity.h"
 
Index: pvDataCPP/src/pv/pvData.h
===================================================================
--- pvDataCPP/src/pv/pvData.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDataCPP/src/pv/pvData.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -10,7 +10,7 @@
 #ifndef PVDATA_H
 #define PVDATA_H
 
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
 #define NOMINMAX
 #endif
 
@@ -410,6 +410,24 @@
     friend class PVDataCreate;
 };
 
+    template<>
+    inline std::ostream& PVScalarValue<int8>::dumpValue(std::ostream& o) const
+    {
+        return o << static_cast<int>(get());
+    }
+
+    template<>
+    inline std::ostream& PVScalarValue<uint8>::dumpValue(std::ostream& o) const
+    {
+    	return o << static_cast<unsigned int>(get());
+    }
+
+    template<>
+    inline std::ostream& PVScalarValue<boolean>::dumpValue(std::ostream& o) const
+    {
+        return o << std::boolalpha << static_cast<bool>(get());
+    }
+
 /**
  * typedefs for the various possible scalar types.
  */
Index: pvDataCPP/src/pv/pvType.h
===================================================================
--- pvDataCPP/src/pv/pvType.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDataCPP/src/pv/pvType.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -15,7 +15,7 @@
 #ifndef PVTYPE_H
 #define PVTYPE_H
 
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
 #define NOMINMAX
 #pragma warning(disable: 4251)
 #endif
Index: pvDataCPP/src/factory/PVScalar.cpp
===================================================================
--- pvDataCPP/src/factory/PVScalar.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDataCPP/src/factory/PVScalar.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -30,21 +30,4 @@
        return static_pointer_cast<const Scalar>(PVField::getField());
     }
 
-    template<>
-    std::ostream& PVScalarValue<int8>::dumpValue(std::ostream& o) const
-    {
-        return o << static_cast<int>(get());
-    }
-
-    template<>
-    std::ostream& PVScalarValue<uint8>::dumpValue(std::ostream& o) const
-    {
-    	return o << static_cast<unsigned int>(get());
-    }
-
-    template<>
-    std::ostream& PVScalarValue<boolean>::dumpValue(std::ostream& o) const
-    {
-        return o << std::boolalpha << static_cast<bool>(get());
-    }
 }}
Index: pvDataCPP/src/misc/parseToPOD.cpp
===================================================================
--- pvDataCPP/src/misc/parseToPOD.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDataCPP/src/misc/parseToPOD.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -249,9 +249,9 @@
 }
 #endif
 
-// MS Visual Studio 2013 defines strtoll, etc.
+// MS Visual Studio 2013 and MinGW define strtoll, etc.
 #if defined(_WIN32)
-#  if (_MSC_VER >= 1800)
+#  if (_MSC_VER >= 1800) || defined(_MINGW)
 #    define WIN_NEEDS_OLL_FUNC 0
 #  else
 #    define WIN_NEEDS_OLL_FUNC 1
Index: pvDataCPP/src/misc/sharedVector.h
===================================================================
--- pvDataCPP/src/misc/sharedVector.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDataCPP/src/misc/sharedVector.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -7,7 +7,7 @@
 #ifndef SHAREDVECTOR_H
 #define SHAREDVECTOR_H
 
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
 #define NOMINMAX
 #endif
 
Index: pvDataCPP/src/misc/epicsException.h
===================================================================
--- pvDataCPP/src/misc/epicsException.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDataCPP/src/misc/epicsException.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -34,7 +34,7 @@
 #ifndef EPICSEXCEPTION_H_
 #define EPICSEXCEPTION_H_
 
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
 #pragma warning( push )
 #pragma warning(disable: 4275) // warning C4275: non dll-interface class used as base for dll-interface class (std::logic_error)
 #endif
@@ -58,7 +58,7 @@
 #  include <execinfo.h>
 #  include <cxxabi.h>
 #  define EXCEPT_USE_BACKTRACE
-#elif defined(_WIN32) && !defined(__MINGW__) && !defined(SKIP_DBGHELP)
+#elif defined(_WIN32) && !defined(_MINGW) && !defined(SKIP_DBGHELP)
 #  define _WINSOCKAPI_
 #  include <windows.h>
 #  include <dbghelp.h>
@@ -215,7 +215,7 @@
     mutable std::string base_msg;
 };
 
-#ifdef _WIN32
+#if defined(_WIN32) && !defined(_MINGW)
 #pragma warning( pop )
 #endif
 
Index: pvAccessCPP/src/utils/introspectionRegistry.cpp
===================================================================
--- pvAccessCPP/src/utils/introspectionRegistry.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/utils/introspectionRegistry.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -4,6 +4,7 @@
  * in file LICENSE that is included with this distribution.
  */
 
+#define epicsExportSharedSymbols
 #include <pv/introspectionRegistry.h>
 #include <pv/convert.h>
 #include <pv/serializationHelper.h>
Index: pvAccessCPP/src/utils/introspectionRegistry.h
===================================================================
--- pvAccessCPP/src/utils/introspectionRegistry.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/utils/introspectionRegistry.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -29,6 +29,8 @@
 #	undef introspectionRegistryEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 // TODO check for memory leaks
 
 namespace epics {
Index: pvAccessCPP/src/ca/caChannel.cpp
===================================================================
--- pvAccessCPP/src/ca/caChannel.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/ca/caChannel.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -5,10 +5,10 @@
  */
 
 #include <epicsVersion.h>
+#include <pv/standardField.h>
 
+#define epicsExportSharedSymbols
 #include <pv/logger.h>
-#include <pv/standardField.h>
-
 #include <pv/caChannel.h>
 
 using namespace epics::pvData;
Index: pvAccessCPP/src/ca/caProvider.cpp
===================================================================
--- pvAccessCPP/src/ca/caProvider.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/ca/caProvider.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -10,10 +10,10 @@
 #include <cadef.h>
 #include <epicsSignal.h>
 
-#include <pv/logger.h>
 
 #define epicsExportSharedSymbols
 
+#include <pv/logger.h>
 #include <pv/caProvider.h>
 #include <pv/caChannel.h>
 
Index: pvAccessCPP/src/rpcService/rpcServer.h
===================================================================
--- pvAccessCPP/src/rpcService/rpcServer.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/rpcService/rpcServer.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -19,11 +19,12 @@
 #	undef rpcServerEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/pvAccess.h>
 #include <pv/rpcService.h>
 #include <pv/serverContext.h>
 
-#include <shareLib.h>
 
 namespace epics { namespace pvAccess { 
 
Index: pvAccessCPP/src/pva/clientFactory.cpp
===================================================================
--- pvAccessCPP/src/pva/clientFactory.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/pva/clientFactory.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -5,11 +5,11 @@
  */
  
 #include <pv/lock.h>
-#include <pv/logger.h>
 
 #include <epicsSignal.h>
 
 #define epicsExportSharedSymbols
+#include <pv/logger.h>
 #include <pv/clientFactory.h>
 #include <pv/clientContextImpl.h>
 
Index: pvAccessCPP/src/server/baseChannelRequester.h
===================================================================
--- pvAccessCPP/src/server/baseChannelRequester.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/server/baseChannelRequester.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -20,6 +20,8 @@
 #	undef baseChannelRequesterEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/serverContext.h>
 #include <pv/serverChannelImpl.h>
 
Index: pvAccessCPP/src/server/responseHandlers.cpp
===================================================================
--- pvAccessCPP/src/server/responseHandlers.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/server/responseHandlers.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -17,6 +17,11 @@
 #include <time.h>
 #include <stdlib.h>
 
+#include <osiSock.h>
+#include <osiProcess.h>
+
+#define epicsExportSharedSymbols
+
 #include <pv/responseHandlers.h>
 #include <pv/remote.h>
 #include <pv/hexDump.h>
@@ -25,8 +30,6 @@
 
 #include <pv/byteBuffer.h>
 
-#include <osiSock.h>
-#include <osiProcess.h>
 #include <pv/logger.h>
 
 #include <pv/pvAccessMB.h>
Index: pvAccessCPP/src/server/beaconEmitter.cpp
===================================================================
--- pvAccessCPP/src/server/beaconEmitter.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/server/beaconEmitter.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -8,12 +8,13 @@
 #define NOMINMAX
 #endif
 
+#include <algorithm>
+
+#define epicsExportSharedSymbols
+
 #include <pv/beaconEmitter.h>
 #include <pv/serializationHelper.h>
-
 #include <pv/logger.h>
-#include <algorithm>
-
 #include <pv/serverContext.h>
 
 using namespace std;
Index: pvAccessCPP/src/server/baseChannelRequester.cpp
===================================================================
--- pvAccessCPP/src/server/baseChannelRequester.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/server/baseChannelRequester.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -4,6 +4,8 @@
  * in file LICENSE that is included with this distribution.
  */
 
+#define epicsExportSharedSymbols
+
 #include <pv/baseChannelRequester.h>
 
 using namespace epics::pvData;
Index: pvAccessCPP/src/server/responseHandlers.h
===================================================================
--- pvAccessCPP/src/server/responseHandlers.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/server/responseHandlers.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -19,6 +19,8 @@
 #	undef responseHandlersEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/serverContext.h>
 #include <pv/remote.h>
 #include <pv/serverChannelImpl.h>
Index: pvAccessCPP/src/remoteClient/clientContextImpl.h
===================================================================
--- pvAccessCPP/src/remoteClient/clientContextImpl.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remoteClient/clientContextImpl.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -19,12 +19,13 @@
 #	undef clientContextImplEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/pvAccess.h>
 #include <pv/remote.h>
 #include <pv/channelSearchManager.h>
 #include <pv/inetAddressUtil.h>
 
-#include <shareLib.h>
 
 class ChannelSearchManager;
 
Index: pvAccessCPP/src/remoteClient/clientContextImpl.cpp
===================================================================
--- pvAccessCPP/src/remoteClient/clientContextImpl.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remoteClient/clientContextImpl.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -13,22 +13,23 @@
 #include <pv/lock.h>
 #include <pv/timer.h>
 #include <pv/bitSetUtil.h>
-#include <pv/serializationHelper.h>
 #include <pv/convert.h>
 #include <pv/queue.h>
 #include <pv/standardPVField.h>
 
+#define epicsExportSharedSymbols
+
 #include <pv/pvAccess.h>
 #include <pv/pvaConstants.h>
 #include <pv/blockingUDP.h>
 #include <pv/blockingTCP.h>
 #include <pv/namedLockPattern.h>
+#include <pv/serializationHelper.h>
 #include <pv/inetAddressUtil.h>
 #include <pv/hexDump.h>
 #include <pv/remote.h>
 #include <pv/channelSearchManager.h>
 #include <pv/simpleChannelSearchManagerImpl.h>
-#include <pv/clientContextImpl.h>
 #include <pv/configuration.h>
 #include <pv/beaconHandler.h>
 #include <pv/logger.h>
@@ -36,6 +37,8 @@
 
 #include <pv/pvAccessMB.h>
 
+#include <pv/clientContextImpl.h>
+
 //#include <tr1/unordered_map>
 
 using std::tr1::dynamic_pointer_cast;
Index: pvAccessCPP/src/remote/blockingTCPConnector.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingTCPConnector.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/blockingTCPConnector.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -4,6 +4,13 @@
  * in file LICENSE that is included with this distribution.
  */
 
+#include <sys/types.h>
+#include <sstream>
+
+#include <epicsThread.h>
+#include <osiSock.h>
+
+#define epicsExportSharedSymbols
 #include <pv/blockingTCP.h>
 #include <pv/remote.h>
 #include <pv/namedLockPattern.h>
@@ -10,12 +17,7 @@
 #include <pv/logger.h>
 #include <pv/codec.h>
 
-#include <epicsThread.h>
-#include <osiSock.h>
 
-#include <sys/types.h>
-#include <sstream>
-
 using namespace epics::pvData;
 
 namespace epics {
Index: pvAccessCPP/src/remote/blockingUDPConnector.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingUDPConnector.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/blockingUDPConnector.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -4,14 +4,16 @@
  * in file LICENSE that is included with this distribution.
  */
 
+#include <sys/types.h>
+
+#include <osiSock.h>
+
+#define epicsExportSharedSymbols
 #include <pv/blockingUDP.h>
 #include <pv/remote.h>
 #include <pv/logger.h>
 
-#include <osiSock.h>
 
-#include <sys/types.h>
-
 using namespace std;
 using namespace epics::pvData;
 
Index: pvAccessCPP/src/remote/blockingUDPTransport.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingUDPTransport.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/blockingUDPTransport.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -9,6 +9,7 @@
 #include <Ws2tcpip.h>
 #endif
 
+#define epicsExportSharedSymbols
 #include <pv/blockingUDP.h>
 #include <pv/pvaConstants.h>
 #include <pv/inetAddressUtil.h>
Index: pvAccessCPP/src/remote/blockingTCPAcceptor.cpp
===================================================================
--- pvAccessCPP/src/remote/blockingTCPAcceptor.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/blockingTCPAcceptor.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -4,6 +4,12 @@
  * in file LICENSE that is included with this distribution.
  */
 
+#include <sstream>
+
+#include <osiSock.h>
+#include <epicsThread.h>
+
+#define epicsExportSharedSymbols
 #include <pv/blockingTCP.h>
 #include "codec.h"
 #include <pv/remote.h>
@@ -11,11 +17,7 @@
 
 #include <pv/epicsException.h>
 
-#include <osiSock.h>
-#include <epicsThread.h>
 
-#include <sstream>
-
 using std::ostringstream;
 using namespace epics::pvData;
 
Index: pvAccessCPP/src/remote/abstractResponseHandler.cpp
===================================================================
--- pvAccessCPP/src/remote/abstractResponseHandler.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/abstractResponseHandler.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -4,15 +4,17 @@
  * in file LICENSE that is included with this distribution.
  */
 
+#include <sstream>
+
+#include <osiSock.h>
+
+#define epicsExportSharedSymbols
 #include <pv/remote.h>
 #include <pv/hexDump.h>
 
 #include <pv/byteBuffer.h>
 
-#include <osiSock.h>
 
-#include <sstream>
-
 using std::ostringstream;
 using std::hex;
 
Index: pvAccessCPP/src/remote/codec.h
===================================================================
--- pvAccessCPP/src/remote/codec.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/codec.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -22,6 +22,14 @@
 #include <epicsTime.h>
 #include <epicsThread.h>
 
+
+#ifdef abstractCodecEpicsExportSharedSymbols
+#   define epicsExportSharedSymbols
+#	undef abstractCodecEpicsExportSharedSymbols
+#endif
+
+#include <shareLib.h>
+
 #include <pv/byteBuffer.h>
 #include <pv/pvType.h>
 #include <pv/lock.h>
@@ -29,10 +37,6 @@
 #include <pv/event.h>
 #include <pv/likely.h>
 
-#ifdef abstractCodecEpicsExportSharedSymbols
-#   define epicsExportSharedSymbols
-#	undef abstractCodecEpicsExportSharedSymbols
-#endif
 
 #include <pv/pvaConstants.h>
 #include <pv/remote.h>
@@ -42,7 +46,6 @@
 #include <pv/namedLockPattern.h>
 #include <pv/inetAddressUtil.h>
 
-#include <shareLib.h>
 
 namespace epics {
   namespace pvAccess {
@@ -420,7 +423,7 @@
     };
 
 
-    class  BlockingTCPTransportCodec :
+    class epicsShareClass BlockingTCPTransportCodec :
       public BlockingSocketAbstractCodec,
       public SecurityPluginControl
     
Index: pvAccessCPP/src/remote/serializationHelper.h
===================================================================
--- pvAccessCPP/src/remote/serializationHelper.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/serializationHelper.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -24,6 +24,8 @@
 #	undef serializationHelperEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/pvaConstants.h>
 #include <pv/pvAccess.h>
 
Index: pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.cpp
===================================================================
--- pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -4,16 +4,19 @@
  * in file LICENSE that is included with this distribution.
  */
 
+#include <stdlib.h>
+#include <time.h>
+#include <vector>
+
+#include <pv/timeStamp.h>
+
+#define epicsExportSharedSymbols
+
 #include <pv/simpleChannelSearchManagerImpl.h>
 #include <pv/pvaConstants.h>
 #include <pv/blockingUDP.h>
 #include <pv/serializeHelper.h>
 
-#include <stdlib.h>
-#include <time.h>
-#include <pv/timeStamp.h>
-#include <vector>
-
 using namespace std;
 using namespace epics::pvData;
 
Index: pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.h
===================================================================
--- pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/simpleChannelSearchManagerImpl.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -21,6 +21,8 @@
 #	undef simpleChannelSearchManagerEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/channelSearchManager.h>
 
 namespace epics {
Index: pvAccessCPP/src/remote/transportRegistry.h
===================================================================
--- pvAccessCPP/src/remote/transportRegistry.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/transportRegistry.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -21,8 +21,6 @@
 #include <pv/lock.h>
 #include <pv/pvType.h>
 #include <pv/epicsException.h>
-#include <pv/remote.h>
-#include <pv/inetAddressUtil.h>
 #include <pv/sharedPtr.h>
 
 #ifdef transportRegistryEpicsExportSharedSymbols
@@ -30,6 +28,11 @@
 #	undef transportRegistryEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
+#include <pv/remote.h>
+#include <pv/inetAddressUtil.h>
+
 namespace epics {
 namespace pvAccess {
 
Index: pvAccessCPP/src/remote/remote.h
===================================================================
--- pvAccessCPP/src/remote/remote.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/remote.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -30,6 +30,8 @@
 #	undef remoteEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/pvaConstants.h>
 #include <pv/configuration.h>
 
@@ -125,7 +127,7 @@
         /**
          * Interface defining transport send control.
          */
-        class TransportSendControl : public epics::pvData::SerializableControl {
+        class epicsShareClass TransportSendControl : public epics::pvData::SerializableControl {
         public:
         	POINTER_DEFINITIONS(TransportSendControl);
             
@@ -142,7 +144,7 @@
         /**
          * Interface defining transport sender (instance sending data over transport).
          */
-        class TransportSender : public Lockable {
+        class epicsShareClass TransportSender : public Lockable {
         public:
         	POINTER_DEFINITIONS(TransportSender);
 
@@ -165,7 +167,7 @@
         /**
          * Interface defining transport (connection).
          */
-        class Transport : public epics::pvData::DeserializableControl {
+        class epicsShareClass Transport : public epics::pvData::DeserializableControl {
         public:
         	POINTER_DEFINITIONS(Transport);
 
@@ -314,7 +316,7 @@
         /**
          * Not public IF, used by Transports, etc.
          */
-        class Context {
+        class epicsShareClass Context {
         public:
         	POINTER_DEFINITIONS(Context);
 
@@ -483,7 +485,7 @@
         /**
          * Interface defining a transport that hosts server channels.
          */
-        class ChannelHostingTransport {
+        class epicsShareClass ChannelHostingTransport {
         public:
         	POINTER_DEFINITIONS(ChannelHostingTransport);
 
Index: pvAccessCPP/src/remote/blockingTCP.h
===================================================================
--- pvAccessCPP/src/remote/blockingTCP.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/blockingTCP.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -33,6 +33,8 @@
 #	undef blockingTCPEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/pvaConstants.h>
 #include <pv/remote.h>
 #include <pv/transportRegistry.h>
@@ -97,7 +99,7 @@
 
         };
 
-        class ResponseHandlerFactory
+        class epicsShareClass ResponseHandlerFactory
         {
             public:
         	POINTER_DEFINITIONS(ResponseHandlerFactory);
Index: pvAccessCPP/src/remote/blockingUDP.h
===================================================================
--- pvAccessCPP/src/remote/blockingUDP.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvAccessCPP/src/remote/blockingUDP.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -28,6 +28,8 @@
 #	undef blockingUDPEpicsExportSharedSymbols
 #endif
 
+#include <shareLib.h>
+
 #include <pv/remote.h>
 #include <pv/pvaConstants.h>
 #include <pv/inetAddressUtil.h>
Index: pvDatabaseCPP/test/src/testPVCopy.cpp
===================================================================
--- pvDatabaseCPP/test/src/testPVCopy.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/test/src/testPVCopy.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -25,6 +25,8 @@
 
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
+
+#define epicsExportSharedSymbols
 #include <pv/channelProviderLocal.h>
 #include "powerSupply.h"
 
Index: pvDatabaseCPP/test/src/testPVRecord.cpp
===================================================================
--- pvDatabaseCPP/test/src/testPVRecord.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/test/src/testPVRecord.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -27,6 +27,9 @@
 #include <pv/standardPVField.h>
 #include <pv/pvData.h>
 #include <pv/pvCopy.h>
+
+#define epicsExportSharedSymbols
+
 #include "powerSupply.h"
 
 
Index: pvDatabaseCPP/test/src/testExampleRecord.cpp
===================================================================
--- pvDatabaseCPP/test/src/testExampleRecord.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/test/src/testExampleRecord.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -27,10 +27,11 @@
 #include <pv/standardPVField.h>
 #include <pv/pvData.h>
 #include <pv/pvAccess.h>
-#include "powerSupply.h"
 
 #include <epicsExport.h>
 
+#include "powerSupply.h"
+
 using namespace std;
 using std::tr1::static_pointer_cast;
 using namespace epics::pvData;
Index: pvDatabaseCPP/test/src/powerSupply.h
===================================================================
--- pvDatabaseCPP/test/src/powerSupply.h	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/test/src/powerSupply.h	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -21,7 +21,6 @@
 #include <pv/alarm.h>
 #include <pv/pvTimeStamp.h>
 #include <pv/pvAlarm.h>
-#include <pv/pvDatabase.h>
 
 #ifdef powerSupplyEpicsExportSharedSymbols
 #   define epicsExportSharedSymbols
@@ -30,6 +29,7 @@
 
 #include <shareLib.h>
 
+#include <pv/pvDatabase.h>
 
 namespace epics { namespace pvDatabase { 
 
Index: pvDatabaseCPP/exampleDatabase/src/exampleDatabase.cpp
===================================================================
--- pvDatabaseCPP/exampleDatabase/src/exampleDatabase.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/exampleDatabase/src/exampleDatabase.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -22,6 +22,9 @@
 
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
+
+#define epicsExportSharedSymbols
+
 #include <pv/channelProviderLocal.h>
 #include <pv/recordList.h>
 #include <pv/traceRecord.h>
@@ -28,7 +31,6 @@
 
 #include <pv/powerSupply.h>
 
-#define epicsExportSharedSymbols
 #include <pv/exampleDatabase.h>
 
 using namespace std;
Index: pvDatabaseCPP/exampleDatabase/src/exampleDatabaseMain.cpp
===================================================================
--- pvDatabaseCPP/exampleDatabase/src/exampleDatabaseMain.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/exampleDatabase/src/exampleDatabaseMain.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -19,9 +19,11 @@
 #include <vector>
 #include <iostream>
 
-#include <pv/channelProviderLocal.h>
 #include <pv/serverContext.h>
 
+#include <epicsExport.h>
+
+#include <pv/channelProviderLocal.h>
 #include <pv/exampleDatabase.h>
 #include <pv/exampleMonitorPlugin.h>
 
Index: pvDatabaseCPP/exampleServer/src/exampleServerMain.cpp
===================================================================
--- pvDatabaseCPP/exampleServer/src/exampleServerMain.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/exampleServer/src/exampleServerMain.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -21,10 +21,12 @@
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
 #include <pv/exampleServer.h>
+#include <pv/serverContext.h>
+
+#include <epicsExport.h>
 #include <pv/traceRecord.h>
 #include <pv/recordList.h>
 #include <pv/channelProviderLocal.h>
-#include <pv/serverContext.h>
 
 using namespace std;
 using std::tr1::static_pointer_cast;
Index: pvDatabaseCPP/examplePowerSupply/src/Makefile
===================================================================
--- pvDatabaseCPP/examplePowerSupply/src/Makefile	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/examplePowerSupply/src/Makefile	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -13,11 +13,11 @@
 PROD_HOST += powerSupplyMain
 powerSupplyMain_SRCS += powerSupplyMain.cpp
 
+powerSupplyMain_LIBS += powerSupply
 powerSupplyMain_LIBS += pvDatabase
 powerSupplyMain_LIBS += pvAccess
 powerSupplyMain_LIBS += pvData
 powerSupplyMain_LIBS += Com
-powerSupplyMain_LIBS += powerSupply
 
 #===========================
 
Index: pvDatabaseCPP/examplePowerSupply/src/powerSupplyMain.cpp
===================================================================
--- pvDatabaseCPP/examplePowerSupply/src/powerSupplyMain.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/examplePowerSupply/src/powerSupplyMain.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -21,10 +21,13 @@
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
 #include <pv/recordList.h>
+#include <pv/serverContext.h>
+
+#include <epicsExport.h>
+
 #include <pv/powerSupply.h>
 #include <pv/traceRecord.h>
 #include <pv/channelProviderLocal.h>
-#include <pv/serverContext.h>
 
 using namespace std;
 using std::tr1::static_pointer_cast;
Index: pvDatabaseCPP/src/pvAccess/registerChannelProviderLocal.cpp
===================================================================
--- pvDatabaseCPP/src/pvAccess/registerChannelProviderLocal.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/src/pvAccess/registerChannelProviderLocal.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -44,7 +44,7 @@
 static const iocshFuncDef pvdblFuncDef = {
     "pvdbl", 0, 0
 };
-extern "C" void epicsShareAPI pvdbl(const iocshArgBuf *args)
+extern "C" void pvdbl(const iocshArgBuf *args)
 {
     PVDatabasePtr master = PVDatabase::getMaster();
     PVStringArrayPtr pvNames = master->getRecordNames();
Index: pvDatabaseCPP/arrayPerformance/src/arrayPerformanceMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/arrayPerformanceMain.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/arrayPerformanceMain.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -22,11 +22,13 @@
 
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
 #include <pv/serverContext.h>
 #include <pv/clientFactory.h>
 
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
 #include <arrayPerformance.h>
 #include <longArrayMonitor.h>
 
Index: pvDatabaseCPP/arrayPerformance/src/longArrayMonitorMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/longArrayMonitorMain.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/longArrayMonitorMain.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -22,11 +22,13 @@
 
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
 #include <pv/serverContext.h>
 #include <pv/clientFactory.h>
 
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
 #include <arrayPerformance.h>
 #include <longArrayMonitor.h>
 
Index: pvDatabaseCPP/arrayPerformance/src/Makefile
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/Makefile	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/Makefile	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -17,28 +17,28 @@
 
 PROD_HOST += arrayPerformanceMain
 arrayPerformanceMain_SRCS += arrayPerformanceMain.cpp
+arrayPerformanceMain_LIBS += pvDatabaseExample
 arrayPerformanceMain_LIBS += pvDatabase pvAccess pvData Com
-arrayPerformanceMain_LIBS += pvDatabaseExample
 
 PROD_HOST += longArrayMonitorMain
 longArrayMonitorMain_SRCS += longArrayMonitorMain.cpp
+longArrayMonitorMain_LIBS += pvDatabaseExample
 longArrayMonitorMain_LIBS += pvDatabase pvAccess pvData Com
-longArrayMonitorMain_LIBS += pvDatabaseExample
 
 PROD_HOST += longArrayGetMain
 longArrayGetMain_SRCS += longArrayGetMain.cpp
+longArrayGetMain_LIBS += pvDatabaseExample
 longArrayGetMain_LIBS += pvDatabase pvAccess pvData Com
-longArrayGetMain_LIBS += pvDatabaseExample
 
 PROD_HOST += longArrayPutMain
 longArrayPutMain_SRCS += longArrayPutMain.cpp
+longArrayPutMain_LIBS += pvDatabaseExample
 longArrayPutMain_LIBS += pvDatabase pvAccess pvData Com
-longArrayPutMain_LIBS += pvDatabaseExample
 
 PROD_HOST += vectorPerformanceMain
 vectorPerformanceMain_SRCS += vectorPerformanceMain.cpp
+vectorPerformanceMain_LIBS += pvDatabaseExample
 vectorPerformanceMain_LIBS += pvDatabase pvAccess pvData Com
-vectorPerformanceMain_LIBS += pvDatabaseExample
 
 
 include $(TOP)/configure/RULES
Index: pvDatabaseCPP/arrayPerformance/src/longArrayPutMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/longArrayPutMain.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/longArrayPutMain.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -22,11 +22,13 @@
 
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
 #include <pv/serverContext.h>
 #include <pv/clientFactory.h>
 
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
 #include <arrayPerformance.h>
 #include <longArrayPut.h>
 
Index: pvDatabaseCPP/arrayPerformance/src/longArrayGetMain.cpp
===================================================================
--- pvDatabaseCPP/arrayPerformance/src/longArrayGetMain.cpp	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ pvDatabaseCPP/arrayPerformance/src/longArrayGetMain.cpp	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -22,11 +22,13 @@
 
 #include <pv/standardField.h>
 #include <pv/standardPVField.h>
-#include <pv/traceRecord.h>
-#include <pv/channelProviderLocal.h>
 #include <pv/serverContext.h>
 #include <pv/clientFactory.h>
 
+#include <epicsExport.h>
+
+#include <pv/traceRecord.h>
+#include <pv/channelProviderLocal.h>
 #include <arrayPerformance.h>
 #include <longArrayGet.h>
 
Index: exampleCPP/HelloWorld/helloClientRunner
===================================================================
--- exampleCPP/HelloWorld/helloClientRunner	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ exampleCPP/HelloWorld/helloClientRunner	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -31,4 +31,7 @@
 
 TOP=$(dirname $0)
 
+# On Cygwin we need DLL directories in PATH 
+export PATH=$TOP/bin/$EPICS_HOST_ARCH:$TOP/../../pvAccessCPP/bin/$EPICS_HOST_ARCH:$TOP/../../pvDataCPP/bin/$EPICS_HOST_ARCH:$PATH
+
 $TOP/bin/$EPICS_HOST_ARCH/HelloClient ${1:-Dave}
Index: exampleCPP/HelloWorld/helloServerRunner
===================================================================
--- exampleCPP/HelloWorld/helloServerRunner	(.../EPICS-CPP-4.4.0)	(revision 2419)
+++ exampleCPP/HelloWorld/helloServerRunner	(.../EPICS-CPP-4_4_0)	(working copy)
@@ -22,5 +22,7 @@
 
 TOP=$(dirname $0)
 
+# On Cygwin we need DLL directories in PATH 
+export PATH=$TOP/bin/$EPICS_HOST_ARCH:$TOP/../../pvAccessCPP/bin/$EPICS_HOST_ARCH:$TOP/../../pvDataCPP/bin/$EPICS_HOST_ARCH:$PATH
+
 $TOP/bin/$EPICS_HOST_ARCH/HelloService
-
Index: exampleCPP/HelloWorld/helloClientRunner.bat
===================================================================
--- exampleCPP/HelloWorld/helloClientRunner.bat	(.../EPICS-CPP-4.4.0)	(revision 0)
+++ exampleCPP/HelloWorld/helloClientRunner.bat	(.../EPICS-CPP-4_4_0)	(revision 2453)
@@ -0,0 +1,38 @@
+@echo OFF
+REM
+REM Copyright: See the COPYRIGHT that is included with this distribution.
+REM            EPICS exampleCPP is distributed subject to a Software License
+REM            Agreement found in file LICENSE that is included with this
+REM            distribution.
+REM
+REM Abs: helloClientRunner executes the helloWorldClient EV4 client.
+REM
+REM Rem: helloWorldClient is a simple example of an E4C client demonstrating support
+REM      for a client/server environment in EPICS V4. 
+REM
+REM      helloWorldClient passes the argument it was given to the helloServer,
+REM      which constructs and returns a simple greeting. The helloClient receives 
+REM      the greeting, and prints it.
+REM
+REM Usage: Execute helloClientRunner any time while helloServerRunner is running.   
+REM 
+REM         > ./helloClientRunner [optional name, if not supplied, "Dave" is used].  
+REM
+REM         E.g.: 
+REM         bash-3.2$ ./helloClientRunner julie
+REM         Hello julie
+REM 
+REM Ref: 
+REM ----------------------------------------------------------------------------
+REM Auth: 17-Jan-2013, Dave Hickin (david.hickin@diamond.ac.uk)
+REM
+REM ============================================================================
+
+set TOP=%~dp0
+set PATH=%TOP%bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvAccessCPP\bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvDataCPP\bin\%EPICS_HOST_ARCH%;%PATH%
+if "%1" == "" (
+    set ARG=Dave
+) else (
+    set ARG=%1
+)
+"%TOP%bin\%EPICS_HOST_ARCH%\HelloClient.exe" %ARG%
Index: exampleCPP/HelloWorld/helloServerRunner.bat
===================================================================
--- exampleCPP/HelloWorld/helloServerRunner.bat	(.../EPICS-CPP-4.4.0)	(revision 0)
+++ exampleCPP/HelloWorld/helloServerRunner.bat	(.../EPICS-CPP-4_4_0)	(revision 2453)
@@ -0,0 +1,24 @@
+@echo OFF
+REM
+REM Copyright: See the COPYRIGHT that is included with this distribution.
+REM            EPICS exampleCPP is distributed subject to a Software License
+REM            Agreement found in file LICENSE that is included with this
+REM            distribution.
+REM
+REM Abs: start_server starts the channel archiver service, which can query a
+REM      Channel Archiver index file, with a given service name 
+REM
+REM Rem: The Channel Archiver Service is an example of an EPICS v4 RPC service.
+REM 
+REM
+REM Usage:  Execute helloServerRunner prior to executing helloClientRunner. 
+REM 
+REM         > ./helloServerRunner          
+REM 
+REM ----------------------------------------------------------------------------
+REM Auth: 17-Jan-2013, Dave Hickin (david.hickin@diamond.ac.uk)
+REM ============================================================================
+
+set TOP=%~dp0
+set PATH=%TOP%bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvAccessCPP\bin\%EPICS_HOST_ARCH%;%TOP%..\..\pvDataCPP\bin\%EPICS_HOST_ARCH%;%PATH%
+"%TOP%bin\%EPICS_HOST_ARCH%\HelloService.exe"

Navigate by Date:
Prev: Accessing RPC result by CSS Andreas Frei
Next: Re: exit puzzle about SNL's example Benjamin Franksen
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  <20152016  2017 
Navigate by Thread:
Prev: Accessing RPC result by CSS Andreas Frei
Next: Looking for MRF PCIE-EVR-300 driver on linux Xu, Shifu
Index: 1994  1995  1996  1997  1998  1999  2000  2001  2002  2003  2004  2005  2006  2007  2008  2009  2010  2011  2012  2013  2014  <20152016  2017 
ANJ, 16 Dec 2015 Valid HTML 4.01! · Home · News · About · Base · Modules · Extensions · Distributions · Download ·
· EPICS V4 · IRMIS · Talk · Bugs · Documents · Links · Licensing ·