]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
Simplify pas and make it EPICS 3.14-ready.
authorsailer <sailer>
Mon, 19 May 2003 11:01:55 +0000 (11:01 +0000)
committersailer <sailer>
Mon, 19 May 2003 11:01:55 +0000 (11:01 +0000)
fist part.
-- Benjamin Sailer

16 files changed:
allParam/Makefile.am
allParam/Makefile.in
allParam/ca/server/paramBlobRecord.cc
allParam/ca/server/paramBlobRecord.h
allParam/ca/server/paramFilenameRecord.cc
allParam/ca/server/paramFilenameRecord.h
allParam/ca/server/paramIntRecord.cc
allParam/ca/server/paramIntRecord.h
allParam/ca/server/paramRecord.cc [deleted file]
allParam/ca/server/paramRecord.h [deleted file]
allParam/ca/server/paramRecordSet.h
allParam/ca/server/paramServer.cc
allParam/ca/server/paramStringRecord.cc
allParam/ca/server/paramStringRecord.h
allParam/ca/server/record.cc
allParam/ca/server/record.h

index 556d3ae536f9782afe2811d1eb057273c8a09110..fb757ec8026e0358d0276b393c6266d2e46f5938 100644 (file)
@@ -48,7 +48,6 @@ pas_SOURCES = ca/server/arrayDest.cc
 pas_SOURCES += ca/server/paramBlobRecord.cc
 pas_SOURCES += ca/server/paramFilenameRecord.cc
 pas_SOURCES += ca/server/paramIntRecord.cc
-pas_SOURCES += ca/server/paramRecord.cc
 pas_SOURCES += ca/server/paramRecordSet.cc
 pas_SOURCES += ca/server/paramStringRecord.cc
 pas_SOURCES += ca/server/record.cc
index f7c988533de7e3abbcae5943499889dd04276729..ac3b87a7c04bda3eb2de168068916781c8ed44fc 100644 (file)
@@ -118,7 +118,7 @@ liboraParam_p_a_CFLAGS = -DPTHREADS
 libtclParam_a_CFLAGS = 
 libtclParam_p_a_CFLAGS = -DPTHREADS
 
-pas_SOURCES = ca/server/arrayDest.cc ca/server/paramBlobRecord.cc ca/server/paramFilenameRecord.cc ca/server/paramIntRecord.cc ca/server/paramRecord.cc ca/server/paramRecordSet.cc ca/server/paramStringRecord.cc ca/server/record.cc ca/server/paramServer.cc
+pas_SOURCES = ca/server/arrayDest.cc ca/server/paramBlobRecord.cc ca/server/paramFilenameRecord.cc ca/server/paramIntRecord.cc ca/server/paramRecordSet.cc ca/server/paramStringRecord.cc ca/server/record.cc ca/server/paramServer.cc
 
 EXTRA_BUILT_SOURCES_MY = oraParam.c
 subdir = .
@@ -166,9 +166,8 @@ PROGRAMS = $(bin_PROGRAMS)
 
 am_pas_OBJECTS = arrayDest.$(OBJEXT) paramBlobRecord.$(OBJEXT) \
        paramFilenameRecord.$(OBJEXT) paramIntRecord.$(OBJEXT) \
-       paramRecord.$(OBJEXT) paramRecordSet.$(OBJEXT) \
-       paramStringRecord.$(OBJEXT) record.$(OBJEXT) \
-       paramServer.$(OBJEXT)
+       paramRecordSet.$(OBJEXT) paramStringRecord.$(OBJEXT) \
+       record.$(OBJEXT) paramServer.$(OBJEXT)
 pas_OBJECTS = $(am_pas_OBJECTS)
 pas_LDADD = $(LDADD)
 pas_DEPENDENCIES =
@@ -193,7 +192,6 @@ am__depfiles_maybe = depfiles
 @AMDEP_TRUE@   ./$(DEPDIR)/paramBlobRecord.Po \
 @AMDEP_TRUE@   ./$(DEPDIR)/paramFilenameRecord.Po \
 @AMDEP_TRUE@   ./$(DEPDIR)/paramIntRecord.Po \
-@AMDEP_TRUE@   ./$(DEPDIR)/paramRecord.Po \
 @AMDEP_TRUE@   ./$(DEPDIR)/paramRecordSet.Po \
 @AMDEP_TRUE@   ./$(DEPDIR)/paramServer.Po \
 @AMDEP_TRUE@   ./$(DEPDIR)/paramStringRecord.Po \
@@ -360,7 +358,6 @@ arrayDest.$(OBJEXT): ca/server/arrayDest.cc
 paramBlobRecord.$(OBJEXT): ca/server/paramBlobRecord.cc
 paramFilenameRecord.$(OBJEXT): ca/server/paramFilenameRecord.cc
 paramIntRecord.$(OBJEXT): ca/server/paramIntRecord.cc
-paramRecord.$(OBJEXT): ca/server/paramRecord.cc
 paramRecordSet.$(OBJEXT): ca/server/paramRecordSet.cc
 paramStringRecord.$(OBJEXT): ca/server/paramStringRecord.cc
 record.$(OBJEXT): ca/server/record.cc
@@ -387,7 +384,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramBlobRecord.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramFilenameRecord.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramIntRecord.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramRecord.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramRecordSet.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramServer.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramStringRecord.Po@am__quote@
@@ -565,18 +561,6 @@ paramIntRecord.obj: ca/server/paramIntRecord.cc
 @AMDEP_TRUE@   $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
        $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o paramIntRecord.obj `cygpath -w ca/server/paramIntRecord.cc`
 
-paramRecord.o: ca/server/paramRecord.cc
-@AMDEP_TRUE@   source='ca/server/paramRecord.cc' object='paramRecord.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@   depfile='$(DEPDIR)/paramRecord.Po' tmpdepfile='$(DEPDIR)/paramRecord.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@   $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o paramRecord.o `test -f 'ca/server/paramRecord.cc' || echo '$(srcdir)/'`ca/server/paramRecord.cc
-
-paramRecord.obj: ca/server/paramRecord.cc
-@AMDEP_TRUE@   source='ca/server/paramRecord.cc' object='paramRecord.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@   depfile='$(DEPDIR)/paramRecord.Po' tmpdepfile='$(DEPDIR)/paramRecord.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@   $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-       $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o paramRecord.obj `cygpath -w ca/server/paramRecord.cc`
-
 paramRecordSet.o: ca/server/paramRecordSet.cc
 @AMDEP_TRUE@   source='ca/server/paramRecordSet.cc' object='paramRecordSet.o' libtool=no @AMDEPBACKSLASH@
 @AMDEP_TRUE@   depfile='$(DEPDIR)/paramRecordSet.Po' tmpdepfile='$(DEPDIR)/paramRecordSet.TPo' @AMDEPBACKSLASH@
index 6b652fbe26b7cbac5ac5b345f4ae89af712bba5b..cbeafec0c23d48a38763c550e21f12e741c6d3d9 100644 (file)
@@ -1,4 +1,4 @@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramBlobRecord.cc,v 1.13 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramBlobRecord.cc,v 1.14 2003-05-19 11:01:55 sailer Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #if HAVE_CONFIG_H
@@ -17,7 +17,7 @@ extern "C" {
 #define EPICS_MAX_INDEX 4092
 
 ParamBlobRecord::ParamBlobRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
-  ParamRecord(cas, p, rn, u)
+  Record(cas, p, rn, u, aitEnumUint32)
 {
        size_t size;
        FILE *tmp;
@@ -39,15 +39,15 @@ ParamBlobRecord::ParamBlobRecord(caServer& cas, const Param *p, const char *rn,
        funcTable.installReadFunc("severity", &Record::readSeverity);
        funcTable.installReadFunc("seconds", &Record::readSeconds);
 
-       funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
-       funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
-       funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
-       funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
-       funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
-       funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
-       funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
-       funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
-       funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+       funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+       funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+       funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+       funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+       funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+       funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+       funcTable.installReadFunc("controlLow", &Record::readControlLow);
+       funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+       funcTable.installReadFunc("precision", &Record::readPrecision);
 
        funcTable.installReadFunc("value", &ParamBlobRecord::readValue);
 }
@@ -126,7 +126,13 @@ caStatus ParamBlobRecord::scan()
        val->setSevr(epicsSevNone);
 
        if (this->interest == aitTrue && pCAS != NULL) {
-               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+               casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+                                                       pCAS->alarmEventMask());
+#else
+               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+                                                       pCAS->alarmEventMask);
+#endif
                this->postEvent (select, *val);
        }
 
@@ -138,7 +144,11 @@ caStatus ParamBlobRecord::read(const casCtx &ctx, gdd &prototype)
        return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
 }
 
+#if EPICS_RELEASE >= 314
+caStatus ParamBlobRecord::write(const casCtx &ctx, const gdd &value)
+#else
 caStatus ParamBlobRecord::write(const casCtx &ctx, gdd &value)
+#endif
 {
        return S_cas_noWrite;
 }
index 6693c8d49feb698492fd5bdb2041d625c0497ed5..7a8c931415dc7597ba6fbcfd06960d50670bd8a8 100644 (file)
@@ -3,22 +3,27 @@
 
 #include "paramRecord.h"
 
-class ParamBlobRecord : public ParamRecord {
+class ParamBlobRecord : public Record {
   private:
        aitIndex index;
        gddAppFuncTable<ParamBlobRecord> funcTable;
 
   public:
-       ParamBlobRecord(caServer&, const Param *, const char *, const char *);
+       ParamBlobRecord(caServer&, const Param *p, const char *rn, const char *u);
        ~ParamBlobRecord();
 
        epicsShareFunc aitEnum bestExternalType() const;
        epicsShareFunc unsigned maxDimension() const;
        epicsShareFunc aitIndex maxBound(unsigned int) const;
        gddAppFuncTableStatus readValue(gdd &);
+
        caStatus scan();
-       caStatus read(const casCtx &, gdd &);
-       caStatus write(const casCtx &, gdd &);
+       caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+       caStatus write(const casCtx &ctx, const gdd &value);
+#else
+       caStatus write(const casCtx &ctx, gdd &value);
+#endif
 };
 
 #endif /* !PARAMBLOBRECORD_H */
index a0fab9208dc24a6e47e17c9ad166d1c475f6d957..eddc5b1810054aa714eea7dfbdd7a0b8d84138e8 100644 (file)
@@ -1,4 +1,4 @@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramFilenameRecord.cc,v 1.9 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramFilenameRecord.cc,v 1.10 2003-05-19 11:01:55 sailer Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #if HAVE_CONFIG_H
@@ -14,7 +14,7 @@ extern "C" {
 #include "paramFilenameRecord.h"
 
 ParamFilenameRecord::ParamFilenameRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
-  ParamRecord(cas, p, rn, u)
+  Record(cas, p, rn, u, aitEnumString)
 {
        int rows;
        char *tmp[PARAM_MAX_ARRAY_LEN];
@@ -38,15 +38,15 @@ ParamFilenameRecord::ParamFilenameRecord(caServer& cas, const Param *p, const ch
        funcTable.installReadFunc("severity", &Record::readSeverity);
        funcTable.installReadFunc("seconds", &Record::readSeconds);
 
-       funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
-       funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
-       funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
-       funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
-       funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
-       funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
-       funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
-       funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
-       funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+       funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+       funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+       funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+       funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+       funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+       funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+       funcTable.installReadFunc("controlLow", &Record::readControlLow);
+       funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+       funcTable.installReadFunc("precision", &Record::readPrecision);
 
        funcTable.installReadFunc("value", &ParamFilenameRecord::readValue);
 }
@@ -156,7 +156,13 @@ caStatus ParamFilenameRecord::scan()
        val->setSevr(epicsSevNone);
 
        if (this->interest == aitTrue && pCAS != NULL) {
-               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+               casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+                                                       pCAS->alarmEventMask());
+#else
+               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+                                                       pCAS->alarmEventMask);
+#endif
                this->postEvent (select, *val);
        }
 
@@ -168,7 +174,11 @@ caStatus ParamFilenameRecord::read(const casCtx &ctx, gdd &prototype)
        return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
 }
 
+#if EPICS_RELEASE >= 314
+caStatus ParamFilenameRecord::write(const casCtx &ctx, const gdd &value)
+#else
 caStatus ParamFilenameRecord::write(const casCtx &ctx, gdd &value)
+#endif
 {
        return S_cas_noWrite;
 }
index 62b36451d8ca7f389960dc9bc53c42f6b181e138..ce75662038061516d30b9a93a8e60d642e78e063 100644 (file)
@@ -3,23 +3,28 @@
 
 #include "paramRecord.h"
 
-class ParamFilenameRecord : public ParamRecord {
+class ParamFilenameRecord : public Record {
   private:
        aitIndex index;
        char *ourValue[PARAM_MAX_ARRAY_LEN];
        gddAppFuncTable<ParamFilenameRecord> funcTable;
 
   public:
-       ParamFilenameRecord(caServer&, const Param *, const char *, const char *);
+       ParamFilenameRecord(caServer&, const Param *p, const char *rn, const char *u);
        ~ParamFilenameRecord();
 
        epicsShareFunc aitEnum bestExternalType() const;
        epicsShareFunc unsigned maxDimension() const;
        epicsShareFunc aitIndex maxBound(unsigned int) const;
        gddAppFuncTableStatus readValue(gdd &);
+
        caStatus scan();
-       caStatus read(const casCtx &, gdd &);
-       caStatus write(const casCtx &, gdd &);
+       caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+       caStatus write(const casCtx &ctx, const gdd &value);
+#else
+       caStatus write(const casCtx &ctx, gdd &value);
+#endif
 };
 
 #endif /* !PARAMFILENAMERECORD_H */
index ab741621d2236985a95b72c555621cf245596a1e..0138b057cb6963b7b4673bce568a09df114e121b 100644 (file)
@@ -1,4 +1,4 @@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.12 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.13 2003-05-19 11:01:55 sailer Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #if HAVE_CONFIG_H
@@ -14,7 +14,7 @@ extern "C" {
 #include "paramIntRecord.h"
 
 ParamIntRecord::ParamIntRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
-  ParamRecord(cas, p, rn, u)
+  Record(cas, p, rn, u, aitEnumUint32)
 {
        int rows;
        unsigned long int tmp[PARAM_MAX_ARRAY_LEN];
@@ -35,15 +35,15 @@ ParamIntRecord::ParamIntRecord(caServer& cas, const Param *p, const char *rn, co
        funcTable.installReadFunc("severity", &Record::readSeverity);
        funcTable.installReadFunc("seconds", &Record::readSeconds);
 
-       funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
-       funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
-       funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
-       funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
-       funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
-       funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
-       funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
-       funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
-       funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+       funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+       funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+       funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+       funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+       funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+       funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+       funcTable.installReadFunc("controlLow", &Record::readControlLow);
+       funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+       funcTable.installReadFunc("precision", &Record::readPrecision);
 
        funcTable.installReadFunc("value", &ParamIntRecord::readValue);
 }
@@ -135,7 +135,13 @@ caStatus ParamIntRecord::scan()
        val->setSevr(epicsSevNone);
 
        if (this->interest == aitTrue && pCAS != NULL) {
-               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+               casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+                                                       pCAS->alarmEventMask());
+#else
+               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+                                                       pCAS->alarmEventMask);
+#endif
                this->postEvent (select, *val);
        }
 
@@ -147,7 +153,11 @@ caStatus ParamIntRecord::read(const casCtx &ctx, gdd &prototype)
        return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
 }
 
+#if EPICS_RELEASE >= 314
+caStatus ParamIntRecord::write(const casCtx &ctx, const gdd &value)
+#else
 caStatus ParamIntRecord::write(const casCtx &ctx, gdd &value)
+#endif
 {
        aitUint32 intValue;
 
index 20493177b2094bb77175f59a7ae75d51433da5ae..40ca08719e3b0741975574e7ac3142d3d1710323 100644 (file)
@@ -4,23 +4,28 @@
 #include "paramRecord.h"
 #include "arrayDest.h"
 
-class ParamIntRecord : public ParamRecord {
+class ParamIntRecord : public Record {
   private:
        aitIndex index;
        unsigned long int ourValue[PARAM_MAX_ARRAY_LEN];
        gddAppFuncTable<ParamIntRecord> funcTable;
 
   public:
-       ParamIntRecord(caServer&, const Param *, const char *, const char *);
+       ParamIntRecord(caServer&, const Param *p, const char *rn, const char *u);
        ~ParamIntRecord();
 
        epicsShareFunc aitEnum bestExternalType() const;
        epicsShareFunc unsigned maxDimension() const;
        epicsShareFunc aitIndex maxBound(unsigned int) const;
        gddAppFuncTableStatus readValue(gdd &);
+
        caStatus scan();
-       caStatus read(const casCtx &, gdd &);
-       caStatus write(const casCtx &, gdd &);
+       caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+       caStatus write(const casCtx &ctx, const gdd &value);
+#else
+       caStatus write(const casCtx &ctx, gdd &value);
+#endif
 };
 
 #endif /* !PARAMINTRECORD_H */
diff --git a/allParam/ca/server/paramRecord.cc b/allParam/ca/server/paramRecord.cc
deleted file mode 100644 (file)
index ce9cf6e..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/Attic/paramRecord.cc,v 1.9 2003-01-31 12:25:32 hadaq Exp $";
-#define _POSIX_C_SOURCE 199509L
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif /* HAVE_CONFIG_H */
-
-extern "C" {
-  #include <unistd.h>
-
-  #include <ctype.h>
-  #include <stdio.h>
-  #include <string.h>
-}
-
-#include "paramRecord.h"
-
-ParamRecord::ParamRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
-  Record(cas, rn, u, aitEnumString), param(p)
-{
-       char tmp;
-       char buf1[PARAM_MAX_NAME_LEN];
-       char buf2[PARAM_MAX_NAME_LEN];
-       char buf3[PARAM_MAX_NAME_LEN];
-
-       strcpy(pPVName, rn);
-       strcpy(buf1, "");
-       strcpy(buf2, "");
-       strcpy(buf3, "");
-       if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &tmp, buf1, buf2, buf3) != 4) {
-               strcpy(name, buf1);
-               strcpy(idx, buf2);
-       } else {
-               strcpy(name, buf2);
-               strcpy(idx, buf3);
-       }
-
-       for (unsigned int i = 0 ; i < strlen(name) ; i++) {
-               name[i] = tolower(name[i]);
-       }
-       for (unsigned int i = 0 ; i < strlen(idx) ; i++) {
-               idx[i] = tolower(idx[i]);
-       }
-       interest = aitFalse;
-}
-
-ParamRecord::~ParamRecord()
-{
-       delete pDest;
-}
-
-const char *ParamRecord::getPVName()
-{
-       return pPVName;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmLow(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmHigh(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmLowWarning(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmHighWarning(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readGraphicLow(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readGraphicHigh(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readControlLow(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readControlHigh(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readPrecision(gdd &value)
-{
-       value.putConvert(0);
-       return S_casApp_success;
-}
-
diff --git a/allParam/ca/server/paramRecord.h b/allParam/ca/server/paramRecord.h
deleted file mode 100644 (file)
index 9271384..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-#ifndef PARAMRECORD_H
-#define PARAMRECORD_H
-
-#include <gdd.h>
-
-extern "C" {
-  #include <allParam.h>
-}
-
-#include "record.h"
-#include "arrayDest.h"
-
-class ParamRecord : public Record {
-  protected:
-       ArrayDestructor *pDest;
-       const Param *param;
-       char pPVName[PARAM_MAX_VALUE_LEN];
-       char name[PARAM_MAX_VALUE_LEN];
-       char idx[PARAM_MAX_VALUE_LEN];
-
-  public:
-       ParamRecord(caServer&, const Param *, const char *, const char *);
-       ~ParamRecord();
-
-       const char *getPVName();
-
-       virtual gddAppFuncTableStatus readAlarmLow(gdd &);
-       virtual gddAppFuncTableStatus readAlarmHigh(gdd &);
-       virtual gddAppFuncTableStatus readAlarmLowWarning(gdd &);
-       virtual gddAppFuncTableStatus readAlarmHighWarning(gdd &);
-       virtual gddAppFuncTableStatus readGraphicLow(gdd &);
-       virtual gddAppFuncTableStatus readGraphicHigh(gdd &);
-       virtual gddAppFuncTableStatus readControlLow(gdd &);
-       virtual gddAppFuncTableStatus readControlHigh(gdd &);
-       virtual gddAppFuncTableStatus readPrecision(gdd &);
-
-       virtual gddAppFuncTableStatus readValue(gdd &) = 0;
-
-       virtual caStatus scan() = 0;
-       virtual caStatus read(const casCtx &, gdd &) = 0;
-       virtual caStatus write(const casCtx &, gdd &) = 0;
-};
-
-#endif /* !PARAMRECORD_H */
-
index bb3f5706453546f8f0d637dbc13200e0662dfb0d..400c062efff49faeee4e3b7c039bee4855b8b32c 100644 (file)
@@ -15,7 +15,7 @@ extern "C" {
 class ParamRecordSet : public caServer {
   private:
     int numPv;
-    ParamRecord *pvs[MAX_NUM_PV];
+    Record *pvs[MAX_NUM_PV];
 
     int numParamSrc;
     Param *param[MAX_PARAM_SRC];
index 0ecd84a3713c05fc3f69cc018321fc83f848e46d..bb707ec34aa712623ac202f7591cdfd72c2cded0 100644 (file)
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.5 2003-01-31 12:25:32 hadaq Exp $";
-#define _POSIX_C_SOURCE 199509L
+static const char rcsId[] =
+       "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.6 2003-05-19 11:01:55 sailer Exp $";
+#define _POSIX_C_SOURCE 199506L
+#define SYSLOG_NAMES
 
 #if HAVE_CONFIG_H
 #include <config.h>
 #endif /* HAVE_CONFIG_H */
 
 extern "C" {
-  #include <unistd.h>
+extern char *optarg;
+extern int optind, opterr, optopt;
 
-  #include <ctype.h>
-  #include <string.h>
-  #include <syslog.h>
+#include <unistd.h>
+
+#include <ctype.h>
+#include <string.h>
+#include <syslog.h>
 }
 
 #include <fdManager.h>
 
 #include "paramRecordSet.h"
 
-int main(int argc, char *argv[]) {
-       openlog(argv[0], LOG_PERROR | LOG_PID, LOG_LOCAL0);
+static const char *ourBasename(const char *s)
+{
+       const char *p;
+
+       p = strrchr(s, '/');
+       return p != NULL ? p + 1 : s;
+}
+
+static void help(const char *name)
+{
+       fprintf(stdout, "%s: Usage(1): %s [ -d ] [ -v verbosity ] [ -w workdir ]\n", name, name);
+       fprintf(stdout, "%s:           Option -d (optional): start as daemon\n",
+                       name);
+       fprintf(stdout, "%s:           Option -v (optional): verbosity,  defaults to info\n", name);
+       fprintf(stdout, "%s:           Option -w (optional): workdir for temporary files (needs to be unique)\n", name);
+       fprintf(stdout, "%s: Usage(2): %s -h\n", name, name);
+       fprintf(stdout, "%s:           Option -h (required): help\n", name);
+}
+
+static void usage(const char *name)
+{
+       fprintf(stderr, "%s: Usage(1): %s [ -d ] [ -v verbosity ] [ -w workdir ]\n", name, name);
+       fprintf(stderr, "%s: Usage(2): %s -h\n", name, name);
+}
+
+int main(int argc, char *argv[])
+{
+       int logoption = LOG_PID;
+       pid_t myPid = 0;
+       int daemon = 0;
+       int i;
+       char *cwd = NULL;
+       int val;
+       char *verbosity = NULL;
+
+       while((val = getopt(argc, argv, "dhv:w:")) != -1) {
+               switch(val) {
+                       case('d'):
+                               daemon = 1;
+                               break;
+                       case('h'):
+                               help(ourBasename(argv[0]));
+                               exit(EXIT_SUCCESS);
+                               break;
+                       case('v'):
+                               verbosity = optarg;
+                               break;
+                       case('w'):
+                               cwd = optarg;
+                               break;
+                       default:
+                               usage(ourBasename(argv[0]));
+                               exit(EXIT_FAILURE);
+               }
+       }
+
+       if (daemon) {
+               if (0 < (myPid = fork())) {
+                       exit(EXIT_SUCCESS);
+               } else {
+                       setsid();
+                       if (0 < (myPid = fork())) {
+                               exit(EXIT_SUCCESS);
+                       } else {
+                               if (!cwd) {
+                                       cwd = "/";
+                               }
+                               chdir(cwd);
+                               freopen("/dev/null", "r", stdin);
+                               freopen("/dev/null", "a", stdout);
+                               freopen("/dev/console", "a", stderr);
+                               myPid = getpid();
+                       }
+               }
+       } else {
+               logoption |= LOG_PERROR;
+       }
+
+       openlog(ourBasename(argv[0]), logoption, LOG_LOCAL0);
+
+       if (verbosity == NULL) {
+               verbosity = "info";
+       }
+       for (i = 0; prioritynames[i].c_name != NULL
+               && 0 != strcmp(prioritynames[i].c_name, verbosity); i++) {
+       }
+       if (prioritynames[i].c_name == NULL) {
+               syslog(LOG_ERR, "%s, %d: Unknown verbosity %s. Exiting.",
+                          __FILE__, __LINE__, verbosity);
+               exit(EXIT_FAILURE);
+       } else {
+               setlogmask(LOG_UPTO(prioritynames[i].c_val));
+       }
 
        ParamRecordSet *cas;
 
        if (NULL == (cas = new ParamRecordSet(MAX_NUM_PV))) {
-               syslog(LOG_ERR, "Cannot allocate memory for the RecordSet. Exiting.\n");
-               exit(-1);
+               syslog(LOG_ERR, "Cannot allocate memory for the RecordSet. Exiting.");
+               exit(EXIT_FAILURE);
        }                                                                       
 
        cas->setDebugLevel(0u);
index 8cbe49fe662a0d9b77cd24f635953852d42ca1b8..65c2024f55e03f1ed6cf8ec97fb8ead744ef3654 100644 (file)
@@ -1,4 +1,4 @@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.11 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.12 2003-05-19 11:01:55 sailer Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #if HAVE_CONFIG_H
@@ -14,7 +14,7 @@ extern "C" {
 #include "paramStringRecord.h"
 
 ParamStringRecord::ParamStringRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
-  ParamRecord(cas, p, rn, u)
+  Record(cas, p, rn, u, aitEnumString)
 {
        int rows;
        char *tmp[PARAM_MAX_ARRAY_LEN];
@@ -38,15 +38,15 @@ ParamStringRecord::ParamStringRecord(caServer& cas, const Param *p, const char *
        funcTable.installReadFunc("severity", &Record::readSeverity);
        funcTable.installReadFunc("seconds", &Record::readSeconds);
 
-       funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
-       funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
-       funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
-       funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
-       funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
-       funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
-       funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
-       funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
-       funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+       funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+       funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+       funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+       funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+       funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+       funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+       funcTable.installReadFunc("controlLow", &Record::readControlLow);
+       funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+       funcTable.installReadFunc("precision", &Record::readPrecision);
 
        funcTable.installReadFunc("value", &ParamStringRecord::readValue);
 }
@@ -156,7 +156,13 @@ caStatus ParamStringRecord::scan()
        }
 
        if (this->interest == aitTrue && pCAS != NULL) {
-               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+               casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+                                                       pCAS->alarmEventMask());
+#else
+               casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+                                                       pCAS->alarmEventMask);
+#endif
                this->postEvent (select, *val);
        }
 
@@ -168,7 +174,11 @@ caStatus ParamStringRecord::read(const casCtx &ctx, gdd &prototype)
        return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
 }
 
+#if EPICS_RELEASE >= 314
+caStatus ParamStringRecord::write(const casCtx &ctx, const gdd &value)
+#else
 caStatus ParamStringRecord::write(const casCtx &ctx, gdd &value)
+#endif
 {
        aitString stringValue;
 
index 75a7d30650f6a11695503b86737422617a878168..680acdb15a1017e3e9dbddc8035954e4ff1ad4ea 100644 (file)
@@ -3,23 +3,28 @@
 
 #include "paramRecord.h"
 
-class ParamStringRecord : public ParamRecord {
+class ParamStringRecord : public Record {
   private:
        aitIndex index;
        char *ourValue[PARAM_MAX_ARRAY_LEN];
        gddAppFuncTable<ParamStringRecord> funcTable;
 
   public:
-       ParamStringRecord(caServer&, const Param *, const char *, const char *);
+       ParamStringRecord(caServer&, const Param *p, const char *rn, const char *u);
        ~ParamStringRecord();
 
        epicsShareFunc aitEnum bestExternalType() const;
        epicsShareFunc unsigned maxDimension() const;
        epicsShareFunc aitIndex maxBound(unsigned int) const;
        gddAppFuncTableStatus readValue(gdd &);
+
        caStatus scan();
-       caStatus read(const casCtx &, gdd &);
-       caStatus write(const casCtx &, gdd &);
+       caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+       caStatus write(const casCtx &ctx, const gdd &value);
+#else
+       caStatus write(const casCtx &ctx, gdd &value);
+#endif
 };
 
 #endif /* !PARAMSTRINGRECORD_H */
index e63ddf04085ddeed37a1bc379e928c63267fe6e7..366a89cd16c5b3f52a21686b6f659cbe219f579f 100644 (file)
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.4 2003-01-31 12:25:32 hadaq Exp $";
-#define _POSIX_C_SOURCE 199509L
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.5 2003-05-19 11:01:56 sailer Exp $";
+#define _POSIX_C_SOURCE 199506L
 
 #if HAVE_CONFIG_H
 #include <config.h>
 #endif /* HAVE_CONFIG_H */
 
 extern "C" {
-  #include <unistd.h>
+#include <unistd.h>
 
-  #include <string.h>
-  #include <time.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
 }
 
 #include "record.h"
 
-/******************** 
- * record Functions *
- ********************/
-
-Record::Record(caServer &cas, const char *n, const char *u, aitEnum t) : casPV(cas), units(u), type(t) {
-       strcpy (name, n);
+#if EPICS_RELEASE >= 314
+Record::Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t) : casPV(cas), param(p), units(u), type(t), timer(getCAS()->createTimer())
+#else
+Record::Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t) : casPV(cas), param(p), units(u), type(t)
+#endif
+{
+       char buf1[PARAM_MAX_NAME_LEN];
+       char buf2[PARAM_MAX_NAME_LEN];
+       char buf3[PARAM_MAX_NAME_LEN];
+
+       strcpy (pPVName, n);
        interest = aitFalse;
 
        alarmStatus = epicsAlarmNone;
        alarmSeverity = epicsSevNone;
 
+       if(sscanf(pPVName, "HAD:P%*c:%[^:]:%[^:]:%[^:]", buf1, buf2, buf3) != 4) {
+               strcpy(name, buf1);
+               strcpy(idx, buf2);
+       } else {
+               strcpy(name, buf2);
+               strcpy(idx, buf3);
+       }
+       for (unsigned int i = 0 ; i < strlen(name) ; i++) {
+               name[i] = tolower(name[i]);
+       }
+       for (unsigned int i = 0 ; i < strlen(idx) ; i++) {
+               idx[i] = tolower(idx[i]);
+       }
+
+       interest = aitFalse;
+
        recordScanTimer = new scanTimer(*this);
+#if EPICS_RELEASE >= 314
+       timer.start(*recordScanTimer, 1.0);
+#endif
 }
 
-Record::~Record() {
+Record::~Record()
+{
+       delete pDest;
 }
 
-/* Misc Functions which are the same in all records */
-
-void Record::destroy() {
+void Record::destroy()
+{
 }
 
-caStatus Record::interestRegister() {
+caStatus Record::interestRegister()
+{
        interest = aitTrue;
        return S_casApp_success;
 }
 
-void Record::interestDelete() {
+void Record::interestDelete()
+{
        interest = aitFalse;
 }
 
-const char *Record::getName() const {
-       return name;
+const char *Record::getName() const
+{
+       return pPVName;
 }
 
-aitEnum Record::bestExternalType() const {
+aitEnum Record::bestExternalType() const
+{
        return type;
 }
 
-/* Read Functions which are the same for all records */
-
-gddAppFuncTableStatus Record::readUnits(gdd &value) {
+gddAppFuncTableStatus Record::readUnits(gdd &value)
+{
        value.putConvert(*units);
        return S_casApp_success;
 }
 
-gddAppFuncTableStatus Record::readStatus(gdd &value) {
-       value.putConvert((unsigned int) alarmStatus);
+gddAppFuncTableStatus Record::readStatus(gdd &value)
+{
+       value.putConvert((aitInt32) alarmStatus);
        return S_casApp_success;
 }
 
-gddAppFuncTableStatus Record::readSeverity(gdd &value) {
-       value.putConvert((unsigned int) alarmSeverity);
+gddAppFuncTableStatus Record::readSeverity(gdd &value)
+{
+       value.putConvert((aitInt32) alarmSeverity);
        return S_casApp_success;
 }
 
-gddAppFuncTableStatus Record::readSeconds(gdd &value) {
+gddAppFuncTableStatus Record::readSeconds(gdd &value)
+{
        time_t now;
        now = time(NULL);
        value.putConvert((aitUint32) now);
        return S_casApp_success;
 }
 
-/***********************
- * scanTimer Functions *
- ***********************/
+gddAppFuncTableStatus Record::readName(gdd &value)
+{
+       value.putConvert(pPVName);
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readAlarmLow(gdd &value)
+{
+       value.putConvert(0);
+       return S_casApp_success;
+}
 
-scanTimer::scanTimer (Record &pv) : osiTimer(1.0), procVar(pv) {
+gddAppFuncTableStatus Record::readAlarmHigh(gdd &value)
+{
+       value.putConvert(2147483647);
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readAlarmLowWarning(gdd &value)
+{
+       value.putConvert(0);
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readAlarmHighWarning(gdd &value)
+{
+       value.putConvert(2147483647);
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readGraphicLow(gdd &value)
+{
+       value.putConvert(0);
+       return S_casApp_success;
 }
 
-void scanTimer::expire() {
+gddAppFuncTableStatus Record::readGraphicHigh(gdd &value)
+{
+       value.putConvert(2147483647);
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readControlLow(gdd &value)
+{
+       value.putConvert(0);
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readControlHigh(gdd &value)
+{
+       value.putConvert(2147483647);
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readEnums(gdd &value)
+{
+       value.putConvert((aitString) "not implemented");
+       return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readPrecision(gdd &value)
+{
+       value.putConvert(0);
+       return S_casApp_success;
+}
+
+#if EPICS_RELEASE >= 314
+scanTimer::scanTimer (Record &pv) : procVar(pv)
+#else
+scanTimer::scanTimer (Record &pv) : osiTimer(1.0), procVar(pv)
+#endif
+{
+}
+
+#if EPICS_RELEASE >= 314
+epicsTimerNotify::expireStatus scanTimer::expire(const epicsTime &t)
+{
+       procVar.scan();
+       return expireStatus(restart, 1.0);
+}
+#else
+void scanTimer::expire()
+{
        procVar.scan();
 }
 
-osiBool scanTimer::again() const {
+osiBool scanTimer::again() const
+{
        return osiTrue;
 }
-
+#endif
index f0a51b9dd23f55e60bd9e6924d2741c64c0ee785..555654a80a687b5fb001dc90646a5d95b993fff5 100644 (file)
@@ -1,31 +1,50 @@
 #ifndef RECORD_H
 #define RECORD_H
 
-#include <casdef.h>
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif /* HAVE_CONFIG_H */
 
+#include <casdef.h>
+#if EPICS_RELEASE >= 314
+#include <epicsTimer.h>
+#else
 #include <osiTimer.h>
+#endif
 #include <aitTypes.h>
 #include <aitHelpers.h>
-
 #include <gddApps.h>
 #include <gddAppFuncTable.h>
 
-#define NAMELENGTH 28
+extern "C" {
+  #include <allParam.h>
+}
+
+#include "arrayDest.h"
 
 class scanTimer;
 
 class Record : public casPV {
   protected:
-       char name[NAMELENGTH + 1];
+       const Param *param;
        const char *units;
        aitEnum type;
        gdd *val;
+#if EPICS_RELEASE >= 314
+       epicsTimer &timer;
+#endif
        scanTimer *recordScanTimer;
        aitBool interest;
        epicsAlarmCondition alarmStatus;
        epicsAlarmSeverity alarmSeverity;
+
+       ArrayDestructor *pDest;
+       char pPVName[PARAM_MAX_VALUE_LEN];
+       char name[PARAM_MAX_VALUE_LEN];
+       char idx[PARAM_MAX_VALUE_LEN];
+
   public:
-       Record(caServer&, const char*, const char*, aitEnum);
+       Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t);
        ~Record();
 
        void destroy();
@@ -34,17 +53,44 @@ class Record : public casPV {
        const char *getName() const;
        aitEnum bestExternalType() const;
 
+       inline const char *getPVName() { return pPVName; }
+
        gddAppFuncTableStatus readUnits(gdd &);
        gddAppFuncTableStatus readStatus(gdd &);
        gddAppFuncTableStatus readSeverity(gdd &);
        gddAppFuncTableStatus readSeconds(gdd &);
+       gddAppFuncTableStatus readName(gdd &);
+       gddAppFuncTableStatus readAlarmLow(gdd &);
+       gddAppFuncTableStatus readAlarmHigh(gdd &);
+       gddAppFuncTableStatus readAlarmLowWarning(gdd &);
+       gddAppFuncTableStatus readAlarmHighWarning(gdd &);
+       gddAppFuncTableStatus readGraphicLow(gdd &);
+       gddAppFuncTableStatus readGraphicHigh(gdd &);
+       gddAppFuncTableStatus readControlLow(gdd &);
+       gddAppFuncTableStatus readControlHigh(gdd &);
+       gddAppFuncTableStatus readEnums(gdd &);
+       gddAppFuncTableStatus readPrecision(gdd &);
 
        virtual gddAppFuncTableStatus readValue(gdd &) = 0;
+
        virtual caStatus scan() = 0;
        virtual caStatus read(const casCtx &, gdd &) = 0;
+#if EPICS_RELEASE >= 314
+       virtual caStatus write(const casCtx &, const gdd &) = 0;
+#else
        virtual caStatus write(const casCtx &, gdd &) = 0;
+#endif
 };
 
+#if EPICS_RELEASE >= 314
+class scanTimer : public epicsTimerNotify {
+  private:
+       Record &procVar;
+  public:
+       scanTimer(Record &);
+       expireStatus expire(const epicsTime &t);
+};
+#else
 class scanTimer : public osiTimer {
   private:
        Record &procVar;
@@ -53,6 +99,7 @@ class scanTimer : public osiTimer {
        void expire();
        osiBool again() const;
 };
+#endif
 
 #endif /* !RECORD_H */