]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
*** empty log message ***
authorhades <hades>
Wed, 14 Mar 2001 21:50:25 +0000 (21:50 +0000)
committerhades <hades>
Wed, 14 Mar 2001 21:50:25 +0000 (21:50 +0000)
allParam/ca/server/paramBlobRecord.cc
allParam/ca/server/paramBlobRecord.h
allParam/ca/server/paramFilenameRecord.cc
allParam/ca/server/paramIntRecord.cc
allParam/ca/server/paramRecord.cc
allParam/ca/server/paramStringRecord.cc

index b56833d4755abae1d6353efef07f0810fc6c4a1c..3d63606a27dfef16ea6283e70a3893f7109c2823 100644 (file)
@@ -1,6 +1,7 @@
 #define _POSIX_C_SOURCE 199509L
 
 extern "C" {
+  #include <stdio.h>
   #include <string.h>
 }
 
@@ -25,12 +26,9 @@ ParamBlobRecord::ParamBlobRecord(caServer& cas, const Param *p, const char *rn,
 
 ParamBlobRecord::~ParamBlobRecord()
 {
-       for(int k = 0 ; k < index ; k++) {
-               delete ourValue[k];
-       }
 }
 
-epicsShareFunc aitEnum ParamRecord::bestExternalType() const
+epicsShareFunc aitEnum ParamBlobRecord::bestExternalType() const
 {
        return aitEnumUint32;
 }
@@ -53,20 +51,20 @@ epicsShareFunc aitIndex ParamBlobRecord::maxBound(unsigned dimension) const
 
 gddAppFuncTableStatus ParamBlobRecord::readValue(gdd &value)
 {
-       if(index == 1) {
-               aitString stringValue = new aitString;
-
-               stringValue = ourValue[0];
-
-               value.putConvert(stringValue);
+       FILE *blob;
+       size_t size;
+       int retVal;
+
+       retVal = Param_getBlob(param, name, idx, &size, &blob);
+       index = 1 + (((unsigned int) size - 1) / sizeof(aitUint32));
+       if((retVal != 0) || (index == 0)) {
+               return S_cas_noRead;
        } else {
-               aitString *stringValue;
-               stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
-                       stringValue[k] = ourValue[k];
-               }
+               aitUint32 *ourValue = new aitUint32[index];
+               fread(ourValue, sizeof(aitUint32), index, blob);
+               fclose(blob);
 
-               value.putRef(stringValue);
+               value.putRef(ourValue);
        }
 
        return S_casApp_success;
@@ -74,29 +72,27 @@ gddAppFuncTableStatus ParamBlobRecord::readValue(gdd &value)
 
 caStatus ParamBlobRecord::scan()
 {
-       caStatus retVal;
-       caServer *pCAS = this->getCAS();
+       FILE *blob;
+       size_t size;
+       int retVal;
+       ArrayDestructor *pDest;
 
-       if(index == 1) {
-               aitString stringValue = new aitString;
-               val = new gddScalar(gddAppType_value, aitEnumString);
-
-               stringValue = ourValue[0];
+       caServer *pCAS = this->getCAS();
 
-               val->putConvert(stringValue);
+       retVal = Param_getBlob(param, name, idx, &size, &blob);
+       index = 1 + (((unsigned int) size - 1) / sizeof(aitUint32));
+       if((retVal != 0) || (index == 0)) {
+               return S_cas_noRead;
        } else {
-               aitString *stringValue;
+               aitUint32 *ourValue = new aitUint32[index];
+               fread(ourValue, sizeof(aitUint32), index, blob);
+               fclose(blob);
 
                val = new gddAtomic(gddAppType_value, aitEnumString, 1, index);
 
-               stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
-                       stringValue[k] = ourValue[k];
-               }
+               pDest = new ArrayDestructor;
 
-               ArrayDestructor *pDest = new ArrayDestructor;
-
-               val->putRef(stringValue, pDest);
+               val->putRef(ourValue, pDest);
        }
 
        val->setStat(epicsAlarmNone);
@@ -107,9 +103,9 @@ caStatus ParamBlobRecord::scan()
                this->postEvent (select, *val);
        }
 
-       retVal = S_cas_success;
+       delete pDest;
 
-       return retVal;
+       return S_cas_success;
 }
 
 caStatus ParamBlobRecord::read(const casCtx &ctx, gdd &prototype)
index 797f8b28d40a6eb8156c820e14008c831788e6d9..0b4a4b67fd8944f5cead19aa3661b7d438429880 100644 (file)
@@ -6,7 +6,6 @@
 class ParamBlobRecord : public ParamRecord {
   private:
        aitIndex index;
-       char *ourValue[PARAM_MAX_ARRAY_LEN];
        gddAppFuncTable<ParamBlobRecord> funcTable;
 
   public:
index 99c897d09fa903a92589c9831bbf629b17a1caf6..b0637a203844976e923c452e0ebb47ac3d6bb09a 100644 (file)
@@ -25,12 +25,12 @@ ParamFilenameRecord::ParamFilenameRecord(caServer& cas, const Param *p, const ch
 
 ParamFilenameRecord::~ParamFilenameRecord()
 {
-       for(int k = 0 ; k < index ; k++) {
+       for(unsigned int k = 0 ; k < index ; k++) {
                delete ourValue[k];
        }
 }
 
-epicsShareFunc aitEnum ParamRecord::bestExternalType() const
+epicsShareFunc aitEnum ParamFilenameRecord::bestExternalType() const
 {
        return aitEnumString;
 }
@@ -62,7 +62,7 @@ gddAppFuncTableStatus ParamFilenameRecord::readValue(gdd &value)
        } else {
                aitString *stringValue;
                stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
+               for (unsigned int k = 0 ; k < index ; k++) {
                        stringValue[k] = ourValue[k];
                }
 
@@ -90,7 +90,7 @@ caStatus ParamFilenameRecord::scan()
                val = new gddAtomic(gddAppType_value, aitEnumString, 1, index);
 
                stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
+               for (unsigned int k = 0 ; k < index ; k++) {
                        stringValue[k] = ourValue[k];
                }
 
index 316ac844a10777d9fef666eba853ef686772a693..fdbfa6f546fb554d25a2515d2891c9a4c22a3de3 100644 (file)
@@ -25,12 +25,9 @@ ParamIntRecord::ParamIntRecord(caServer& cas, const Param *p, const char *rn, co
 
 ParamIntRecord::~ParamIntRecord()
 {
-       for(int k = 0 ; k < index ; k++) {
-               delete ourValue[k];
-       }
 }
 
-epicsShareFunc aitEnum ParamRecord::bestExternalType() const
+epicsShareFunc aitEnum ParamIntRecord::bestExternalType() const
 {
        return aitEnumUint32;
 }
@@ -53,20 +50,26 @@ epicsShareFunc aitIndex ParamIntRecord::maxBound(unsigned dimension) const
 
 gddAppFuncTableStatus ParamIntRecord::readValue(gdd &value)
 {
-       if(index == 1) {
-               aitString stringValue = new aitString;
-
-               stringValue = ourValue[0];
-
-               value.putConvert(stringValue);
+       int rows;
+       int retVal;
+       retVal = Param_getIntArray(param, name, idx, PARAM_MAX_ARRAY_LEN, &rows, ourValue);
+       index = (unsigned int) rows;
+       if((retVal != 0) || (index == 0)) {
+               return S_cas_noRead;
+       } else if(index == 1) {
+               aitUint32 intValue;
+
+               intValue = ourValue[0];
+
+               value.putConvert(intValue);
        } else {
-               aitString *stringValue;
-               stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
-                       stringValue[k] = ourValue[k];
+               aitUint32 *intValue = new aitUint32[index];
+               for (unsigned int k = 0 ; k < index ; k++) {
+                       intValue[k] = ourValue[k];
                }
 
-               value.putRef(stringValue);
+               value.putRef(intValue);
+               delete [] intValue;
        }
 
        return S_casApp_success;
@@ -74,29 +77,34 @@ gddAppFuncTableStatus ParamIntRecord::readValue(gdd &value)
 
 caStatus ParamIntRecord::scan()
 {
-       caStatus retVal;
        caServer *pCAS = this->getCAS();
 
-       if(index == 1) {
-               aitString stringValue = new aitString;
-               val = new gddScalar(gddAppType_value, aitEnumString);
+       int rows;
+       int retVal;
+       ArrayDestructor *pDest;
 
-               stringValue = ourValue[0];
+       retVal = Param_getIntArray(param, name, idx, PARAM_MAX_ARRAY_LEN, &rows, ourValue);
+       index = (unsigned int) rows;
+       if((retVal != 0) || (index == 0)) {
+               return S_cas_noRead;
+       } else if(index == 1) {
+               aitUint32 intValue;
+               val = new gddScalar(gddAppType_value, aitEnumUint32);
 
-               val->putConvert(stringValue);
-       } else {
-               aitString *stringValue;
-
-               val = new gddAtomic(gddAppType_value, aitEnumString, 1, index);
+               intValue = ourValue[0];
 
-               stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
-                       stringValue[k] = ourValue[k];
+               val->putConvert(intValue);
+       } else {
+               pDest = new ArrayDestructor;
+               aitUint32 *intValue = new aitUint32[index];
+               for (unsigned int k = 0 ; k < index ; k++) {
+                       intValue[k] = ourValue[k];
                }
 
-               ArrayDestructor *pDest = new ArrayDestructor;
+               val = new gddAtomic(gddAppType_value, aitEnumUint32, 1, index);
 
-               val->putRef(stringValue, pDest);
+               val->putRef(intValue, pDest);
+               delete [] intValue;
        }
 
        val->setStat(epicsAlarmNone);
@@ -107,9 +115,9 @@ caStatus ParamIntRecord::scan()
                this->postEvent (select, *val);
        }
 
-       retVal = S_cas_success;
+       delete pDest;
 
-       return retVal;
+       return S_cas_success;
 }
 
 caStatus ParamIntRecord::read(const casCtx &ctx, gdd &prototype)
@@ -119,16 +127,11 @@ caStatus ParamIntRecord::read(const casCtx &ctx, gdd &prototype)
 
 caStatus ParamIntRecord::write(const casCtx &ctx, gdd &value)
 {
-       caServer *pCAS = this->getCAS();
-
-       aitString stringValue;
-
-       value.getConvert(stringValue);
+       aitUint32 intValue;
 
-       char ourValue[PARAM_MAX_VALUE_LEN];
-       strcpy(ourValue, (const char *) stringValue);
+       value.getConvert(intValue);
 
-       Param_storeString(param, name, idx, ourValue);
+       Param_storeInt(param, name, idx, (unsigned long int) intValue);
 
        return S_cas_success;
 }
index c1c43eadc0cc67ecf526aa333fa83ff317bb37c1..7b073789214b3fb599ad1b7c316af68c59e1e242 100644 (file)
@@ -34,10 +34,10 @@ ParamRecord::ParamRecord(caServer& cas, const Param *p, const char *rn, const ch
                strcpy(idx, buf3);
        }
 
-       for (int i = 0 ; i < strlen(name) ; i++) {
+       for (unsigned int i = 0 ; i < strlen(name) ; i++) {
                name[i] = tolower(name[i]);
        }
-       for (int i = 0 ; i < strlen(idx) ; i++) {
+       for (unsigned int i = 0 ; i < strlen(idx) ; i++) {
                idx[i] = tolower(idx[i]);
        }
        interest = aitFalse;
index 1b356a7e4f734d5f63ef86aba4cc6a2752cfa187..060228cacbec6206581d2487949aa398ade71916 100644 (file)
@@ -25,12 +25,12 @@ ParamStringRecord::ParamStringRecord(caServer& cas, const Param *p, const char *
 
 ParamStringRecord::~ParamStringRecord()
 {
-       for(int k = 0 ; k < index ; k++) {
+       for(unsigned int k = 0 ; k < index ; k++) {
                delete ourValue[k];
        }
 }
 
-epicsShareFunc aitEnum ParamRecord::bestExternalType() const
+epicsShareFunc aitEnum ParamStringRecord::bestExternalType() const
 {
        return aitEnumString;
 }
@@ -62,7 +62,7 @@ gddAppFuncTableStatus ParamStringRecord::readValue(gdd &value)
        } else {
                aitString *stringValue;
                stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
+               for (unsigned int k = 0 ; k < index ; k++) {
                        stringValue[k] = ourValue[k];
                }
 
@@ -90,7 +90,7 @@ caStatus ParamStringRecord::scan()
                val = new gddAtomic(gddAppType_value, aitEnumString, 1, index);
 
                stringValue = new aitString[index];
-               for (int k = 0 ; k < index ; k++) {
+               for (unsigned int k = 0 ; k < index ; k++) {
                        stringValue[k] = ourValue[k];
                }
 
@@ -119,8 +119,6 @@ caStatus ParamStringRecord::read(const casCtx &ctx, gdd &prototype)
 
 caStatus ParamStringRecord::write(const casCtx &ctx, gdd &value)
 {
-       caServer *pCAS = this->getCAS();
-
        aitString stringValue;
 
        value.getConvert(stringValue);