]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
*** empty log message ***
authorhadaq <hadaq>
Tue, 21 May 2002 12:53:35 +0000 (12:53 +0000)
committerhadaq <hadaq>
Tue, 21 May 2002 12:53:35 +0000 (12:53 +0000)
allParam/ca/client/caParam.c

index 4bb306677d03d20217cd52e2cb5ea693a4958462..ef5115a8e78cc7a63643c763399b117d02078d4e 100644 (file)
@@ -57,6 +57,8 @@ typedef struct ParamBlobResultS {
 
 int conSetupParam(Param *my, const char *setup)
 {
+       int retVal = 0;
+       int status = ECA_NORMAL;
 #if ( _POSIX_VERSION < 199506L )
        pthread_mutexattr_t *attr;
 #endif
@@ -82,7 +84,12 @@ int conSetupParam(Param *my, const char *setup)
 
        ((CaParam *) (my->specParam))->cache = Tcl_CreateInterp();
 
-       return 0;
+       if((status = ca_task_initialize()) != ECA_NORMAL) {
+               Param_strerror((Param *) my, ca_message(status));
+               retVal = -1;
+       }
+
+       return retVal;
 }
 
 int conParam(Param *my)
@@ -92,6 +99,8 @@ int conParam(Param *my)
 
 void desParam(Param *my)
 {
+       ca_task_exit();
+
        Tcl_DeleteInterp(((CaParam *) (my->specParam))->cache);
        pthread_mutex_destroy(((CaParam *) (my->specParam))->cacheLock);
        free(((CaParam *) (my->specParam))->cacheLock);
@@ -127,11 +136,6 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
 
        *rows = 0;
        if(Param_getIntArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) {
-               if((status = ca_task_initialize()) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-                       retVal = -1;
-               }
-
                pPVName = malloc((strlen("HAD:PI:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char));
                Param_returnPVName(my, "PI", name, idx, pPVName);
 
@@ -141,28 +145,27 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
                } else if (status != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
                        retVal = -1;
-               }
-
-               if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-                       found = 0;
-                       retVal = 0;
-               }
-               if(found == 1) {
-                       ParamIntResult resultS, *result = &resultS;
-                       result->val = val;
-                       result->rows = rows;
-                       result->maxrows = maxrows;
-                       result->my = my;
-                       result->retVal = &retVal;
-
-                       status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyIntsToAllocMem, result);
-                       Param_strerror((Param *) my, ca_message(status));
+               } else {
 
-                       if((status = ca_pend_event(TIMEOUT)) == ECA_TIMEOUT) {
+                       if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
                                Param_strerror((Param *) my, ca_message(status));
-                       } else if (status != ECA_NORMAL) {
+                               found = 0;
+                               retVal = 0;
+                       }
+                       if(found == 1) {
+                               ParamIntResult resultS, *result = &resultS;
+                               result->val = val;
+                               result->rows = rows;
+                               result->maxrows = maxrows;
+                               result->my = my;
+                               result->retVal = &retVal;
+
+                               status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyIntsToAllocMem, result);
                                Param_strerror((Param *) my, ca_message(status));
+
+                               if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) {
+                                       Param_strerror((Param *) my, ca_message(status));
+                               }
                        }
                }
 
@@ -172,9 +175,6 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
 
                free(pPVName);
 
-               if((status = ca_task_exit()) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-               }
                if(maxrows == 1) {
                        Param_storeIntCache(my, name, idx, *val);
                } else {
@@ -200,11 +200,6 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
 
        *rows = 0;
        if(Param_getStringArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) {
-               if((status = ca_task_initialize()) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-                       retVal = -1;
-               }
-
                pPVName = malloc((strlen("HAD:PS:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char));
                Param_returnPVName(my, "PS", name, idx, pPVName);
 
@@ -214,40 +209,36 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
                } else if (status != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
                        retVal = -1;
-               }
-
-               if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-                       found = 0;
-                       retVal = 0;
-               }
-               if(found == 1) {
-                       ParamStringResult resultS, *result = &resultS;
-                       result->val = val;
-                       result->rows = rows;
-                       result->maxrows = maxrows;
-                       result->my = my;
-                       result->retVal = &retVal;
-
-                       status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result);
-                       Param_strerror((Param *) my, ca_message(status));
+               } else {
 
-                       if((status = ca_pend_event(TIMEOUT)) == ECA_TIMEOUT) {
+                       if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
                                Param_strerror((Param *) my, ca_message(status));
-                       } else if (status != ECA_NORMAL) {
+                               found = 0;
+                               retVal = 0;
+                       }
+                       if(found == 1) {
+                               ParamStringResult resultS, *result = &resultS;
+                               result->val = val;
+                               result->rows = rows;
+                               result->maxrows = maxrows;
+                               result->my = my;
+                               result->retVal = &retVal;
+
+                               status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result);
                                Param_strerror((Param *) my, ca_message(status));
+
+                               if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) {
+                                       Param_strerror((Param *) my, ca_message(status));
+                               }
                        }
-               }
 
-               if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
+                       if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
+                               Param_strerror((Param *) my, ca_message(status));
+                       }
                }
 
                free(pPVName);
 
-               if((status = ca_task_exit()) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-               }
                if(maxrows == 1) {
                        Param_storeStringCache(my, name, idx, *val);
                } else {
@@ -273,11 +264,6 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
 
        *rows = 0;
        if(Param_getFilenameArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) {
-               if((status = ca_task_initialize()) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-                       retVal = -1;
-               }
-
                pPVName = malloc((strlen("HAD:PF:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char));
                Param_returnPVName(my, "PF", name, idx, pPVName);
 
@@ -287,28 +273,27 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
                } else if (status != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
                        retVal = -1;
-               }
-
-               if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-                       found = 0;
-                       retVal = 0;
-               }
-               if(found == 1) {
-                       ParamStringResult resultS, *result = &resultS;
-                       result->val = val;
-                       result->rows = rows;
-                       result->maxrows = maxrows;
-                       result->my = my;
-                       result->retVal = &retVal;
-
-                       status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result);
-                       Param_strerror((Param *) my, ca_message(status));
+               } else {
 
-                       if((status = ca_pend_event(TIMEOUT)) == ECA_TIMEOUT) {
+                       if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
                                Param_strerror((Param *) my, ca_message(status));
-                       } else if (status != ECA_NORMAL) {
+                               found = 0;
+                               retVal = 0;
+                       }
+                       if(found == 1) {
+                               ParamStringResult resultS, *result = &resultS;
+                               result->val = val;
+                               result->rows = rows;
+                               result->maxrows = maxrows;
+                               result->my = my;
+                               result->retVal = &retVal;
+
+                               status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result);
                                Param_strerror((Param *) my, ca_message(status));
+
+                               if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) {
+                                       Param_strerror((Param *) my, ca_message(status));
+                               }
                        }
                }
 
@@ -318,9 +303,6 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
 
                free(pPVName);
 
-               if((status = ca_task_exit()) != ECA_NORMAL) {
-                       Param_strerror((Param *) my, ca_message(status));
-               }
                if(maxrows == 1) {
                        Param_storeStringCache(my, name, idx, *val);
                } else {
@@ -342,11 +324,6 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si
        chid chan;
        char *pPVName;
 
-       if((status = ca_task_initialize()) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-               retVal = -1;
-       }
-
        pPVName = malloc((strlen("HAD:PB:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char));
        Param_returnPVName(my, "PB", name, idx, pPVName);
 
@@ -356,33 +333,32 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si
        } else if (status != ECA_NORMAL) {
                Param_strerror((Param *) my, ca_message(status));
                retVal = -1;
-       }
-
-       if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-               found = 0;
-               retVal = 0;
-       }
-       if((*val = tmpfile()) == NULL) {
-               Param_strerror((Param *) my, strerror(errno));
-               found = 0;
-               retVal = -1;
-       }
+       } else {
 
-       if(found == 1) {
-               ParamBlobResult resultS, *result = &resultS;
-               result->val = val;
-               result->size = size;
-               result->my = my;
-               result->retVal = &retVal;
+               if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
+                       Param_strerror((Param *) my, ca_message(status));
+                       found = 0;
+                       retVal = 0;
+               }
+               if((*val = tmpfile()) == NULL) {
+                       Param_strerror((Param *) my, strerror(errno));
+                       found = 0;
+                       retVal = -1;
+               }
 
-               status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyBlobToAllocMem, result);
-               Param_strerror((Param *) my, ca_message(status));
+               if(found == 1) {
+                       ParamBlobResult resultS, *result = &resultS;
+                       result->val = val;
+                       result->size = size;
+                       result->my = my;
+                       result->retVal = &retVal;
 
-               if((status = ca_pend_event(TIMEOUT)) == ECA_TIMEOUT) {
-                       Param_strerror((Param *) my, ca_message(status));
-               } else if (status != ECA_NORMAL) {
+                       status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyBlobToAllocMem, result);
                        Param_strerror((Param *) my, ca_message(status));
+
+                       if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) {
+                               Param_strerror((Param *) my, ca_message(status));
+                       }
                }
        }
 
@@ -392,10 +368,6 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si
 
        free(pPVName);
 
-       if((status = ca_task_exit()) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-       }
-
        return retVal;
 }
 
@@ -407,11 +379,6 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned
        chid chan;
        char *pPVName;
 
-       if((status = ca_task_initialize()) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-               retVal = -1;
-       }
-
        pPVName = malloc((strlen("HAD:PI:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char));
        Param_returnPVName(my, "PI", name, idx, pPVName);
 
@@ -421,34 +388,29 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned
        } else if (status != ECA_NORMAL) {
                Param_strerror((Param *) my, ca_message(status));
                retVal = -1;
-       }
-
-       if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-               found = 0;
-               retVal = 0;
-       }
-       if(found == 1) {
-               status = ca_put(DBR_LONG, chan, &value);
-               Param_strerror((Param *) my, ca_message(status));
+       } else {
 
-               if((status = ca_pend_event(TIMEOUT)) == ECA_TIMEOUT) {
+               if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
-               } else if (status != ECA_NORMAL) {
+                       found = 0;
+                       retVal = 0;
+               }
+               if(found == 1) {
+                       status = ca_put(DBR_LONG, chan, &value);
                        Param_strerror((Param *) my, ca_message(status));
+
+                       if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) {
+                               Param_strerror((Param *) my, ca_message(status));
+                       }
                }
-       }
 
-       if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
+               if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
+                       Param_strerror((Param *) my, ca_message(status));
+               }
        }
 
        free(pPVName);
 
-       if((status = ca_task_exit()) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-       }
-
        return retVal;
 }
 
@@ -460,11 +422,6 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const
        chid chan;
        char *pPVName;
 
-       if((status = ca_task_initialize()) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-               retVal = -1;
-       }
-
        pPVName = malloc((strlen("HAD:PS:") + (my->setup == NULL ? 0 : strlen(my->setup) + 1) + strlen(name) + 1 + strlen(idx) + 1) * sizeof(char));
        Param_returnPVName(my, "PS", name, idx, pPVName);
 
@@ -474,34 +431,29 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const
        } else if (status != ECA_NORMAL) {
                Param_strerror((Param *) my, ca_message(status));
                retVal = -1;
-       }
-
-       if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-               found = 0;
-               retVal = 0;
-       }
-       if(found == 1) {
-               status = ca_put(DBR_STRING, chan, value);
-               Param_strerror((Param *) my, ca_message(status));
+       } else {
 
-               if((status = ca_pend_event(TIMEOUT)) == ECA_TIMEOUT) {
+               if((status = ca_pend_io(TIMEOUT)) != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
-               } else if (status != ECA_NORMAL) {
+                       found = 0;
+                       retVal = 0;
+               }
+               if(found == 1) {
+                       status = ca_put(DBR_STRING, chan, value);
                        Param_strerror((Param *) my, ca_message(status));
+
+                       if((status = ca_pend_event(TIMEOUT)) != ECA_NORMAL) {
+                               Param_strerror((Param *) my, ca_message(status));
+                       }
                }
-       }
 
-       if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
+               if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
+                       Param_strerror((Param *) my, ca_message(status));
+               }
        }
 
        free(pPVName);
 
-       if((status = ca_task_exit()) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
-       }
-
        return retVal;
 }