]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
*** empty log message ***
authorhadaq <hadaq>
Mon, 27 May 2002 13:29:52 +0000 (13:29 +0000)
committerhadaq <hadaq>
Mon, 27 May 2002 13:29:52 +0000 (13:29 +0000)
allParam/ca/client/caParam.c
allParam/file/fileParam.c
allParam/include/allParam.h
allParam/tcl/tclParam.c

index badced12a190315d87019ce8d105780c9e338088..7965d35677df6c1e4d33f97739549e5ff275be91 100644 (file)
@@ -1,4 +1,4 @@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/client/caParam.c,v 1.16 2002-05-23 01:50:27 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/client/caParam.c,v 1.17 2002-05-27 13:29:52 hadaq Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #include <unistd.h>
@@ -16,12 +16,14 @@ static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuild
 
 #include <allParam.h>
 
-#define TIMEOUTEVT 0.002
+#define TIMEOUTEVT 0.0002
+#define TIMEOUTSG 10.0
 #define TIMEOUTIO 10.0
 
 static void Param_copyStringsToAllocMem(struct event_handler_args args);
 static void Param_copyIntsToAllocMem(struct event_handler_args args);
 static void Param_copyBlobToAllocMem(struct event_handler_args args);
+static void Param_confirmStore(struct event_handler_args args);
 static void Param_returnPVName(const Param *my, const char *, const char *, const char *, char *);
 static void Param_strerror(Param *, const char *);
 static int Param_getIntArrayCache(const Param *, const char *, const char *, int, int *, unsigned long int *);
@@ -60,6 +62,10 @@ typedef struct ParamBlobResultS {
        int *isReady;
 } ParamBlobResult;
 
+typedef struct ParamConfirmStoreStructS {
+       int *isReady;
+} ParamConfirmStoreStruct;
+
 int conSetupParam(Param *my, const char *setup)
 {
        struct utsname bufferS, *buffer = &bufferS;
@@ -142,7 +148,7 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, int *r
 
 int Param_getIntArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val)
 {
-       int isReadyS, *isReady = &isReadyS;
+       int isReady;
        int retVal = 0;
        int status;
        int found = 1;
@@ -153,6 +159,9 @@ 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)) {
+#ifdef SYNCHRONOUS_GROUP
+               CA_SYNC_GID pgid;
+#endif
                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);
 
@@ -163,32 +172,54 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
                        Param_strerror((Param *) my, ca_message(status));
                        retVal = -1;
                } else {
-
-                       if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
+#ifdef SYNCHRONOUS_GROUP
+                       ca_sg_create(&pgid);
+#endif
+                       do {
+                               status = ca_pend_io(TIMEOUTIO);
+                       } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT));
+                       if(status != ECA_NORMAL) {
                                Param_strerror((Param *) my, ca_message(status));
                                found = 0;
                                retVal = 0;
                        }
                        if(found == 1) {
+#ifndef SYNCHRONOUS_GROUP
                                ParamIntResult resultS, *result = &resultS;
                                result->val = val;
                                result->rows = rows;
                                result->maxrows = maxrows;
                                result->my = my;
                                result->retVal = &retVal;
-                               result->isReady = isReady;
-                               *isReady = 1;
+                               result->isReady = &isReady;
+                               isReady = 1;
 
                                status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyIntsToAllocMem, result);
+#else
+                               status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, val);
+#endif
                                Param_strerror((Param *) my, ca_message(status));
+#ifndef SYNCHRONOUS_GROUP
                                do {
-                                       status = ca_pend_event(TIMEOUTEVT);
-                               } while(*isReady == 1);
+                                       ca_pend_event(TIMEOUTEVT);
+                               } while(isReady == 1);
+#else
+                               if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) {
+                                       retVal = 0;
+                                       *rows = 0;
+                               } else if (status == ECA_NORMAL) {
+                                       retVal = 0;
+                                       *rows = maxrows > ca_element_count(chan) ? ca_element_count(chan) : maxrows;
+                               } else {
+                                       retVal = -1;
+                                       *rows = 0;
+                               }
+                               ca_sg_delete(pgid);
+#endif
+                       }
+                       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);
@@ -208,7 +239,7 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx, int ma
 
 int Param_getStringArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val)
 {
-       int isReadyS, *isReady = &isReadyS;
+       int isReady;
        int retVal = 0;
        int status;
        int found = 1;
@@ -219,6 +250,9 @@ 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)) {
+#ifdef SYNCHRONOUS_GROUP
+               CA_SYNC_GID pgid;
+#endif
                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);
 
@@ -229,28 +263,50 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
                        Param_strerror((Param *) my, ca_message(status));
                        retVal = -1;
                } else {
-
-                       if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
+#ifdef SYNCHRONOUS_GROUP
+                       ca_sg_create(&pgid);
+#endif
+                       do {
+                               status = ca_pend_io(TIMEOUTIO);
+                       } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT));
+                       if(status != ECA_NORMAL) {
                                Param_strerror((Param *) my, ca_message(status));
                                found = 0;
                                retVal = 0;
                        }
                        if(found == 1) {
+#ifndef SYNCHRONOUS_GROUP
                                ParamStringResult resultS, *result = &resultS;
                                result->val = val;
                                result->rows = rows;
                                result->maxrows = maxrows;
                                result->my = my;
                                result->retVal = &retVal;
-                               result->isReady = isReady;
-                               *isReady = 1;
+                               result->isReady = &isReady;
+                               isReady = 1;
 
                                status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result);
+#else
+                               status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, val);
+#endif
                                Param_strerror((Param *) my, ca_message(status));
-
+#ifndef SYNCHRONOUS_GROUP
                                do {
-                                       status = ca_pend_event(TIMEOUTEVT);
-                               } while(*isReady == 1);
+                                       ca_pend_event(TIMEOUTEVT);
+                               } while(isReady == 1);
+#else
+                               if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) {
+                                       retVal = 0;
+                                       *rows = 0;
+                               } else if (status == ECA_NORMAL) {
+                                       retVal = 0;
+                                       *rows = maxrows > ca_element_count(chan) ? ca_element_count(chan) : maxrows;
+                               } else {
+                                       retVal = -1;
+                                       *rows = 0;
+                               }
+                               ca_sg_delete(pgid);
+#endif
                        }
 
                        if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
@@ -275,7 +331,7 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
 
 int Param_getFilenameArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val)
 {
-       int isReadyS, *isReady = &isReadyS;
+       int isReady;
        int retVal = 0;
        int status;
        int found = 1;
@@ -287,6 +343,9 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
        *rows = 0;
 
        if(Param_getStringArrayCache(my, name, idx, maxrows, rows, val) || (*rows != maxrows)) {
+#ifdef SYNCHRONOUS_GROUP
+               CA_SYNC_GID pgid;
+#endif
                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);
 
@@ -297,33 +356,53 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
                        Param_strerror((Param *) my, ca_message(status));
                        retVal = -1;
                } else {
-
-                       if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
+#ifdef SYNCHRONOUS_GROUP
+                       ca_sg_create(&pgid);
+#endif
+                       do {
+                               status = ca_pend_io(TIMEOUTIO);
+                       } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT));
+                       if(status != ECA_NORMAL) {
                                Param_strerror((Param *) my, ca_message(status));
                                found = 0;
                                retVal = 0;
                        }
                        if(found == 1) {
+#ifndef SYNCHRONOUS_GROUP
                                ParamStringResult resultS, *result = &resultS;
-                               result->val = val;
+                               result->val = prefixVal;
                                result->rows = rows;
                                result->maxrows = maxrows;
                                result->my = my;
                                result->retVal = &retVal;
-                               result->isReady = isReady;
-                               *isReady = 1;
+                               result->isReady = &isReady;
+                               isReady = 1;
 
                                for (i = 0 ; i < maxrows ; i++) {
                                        prefixVal[i] = malloc(PARAM_MAX_VALUE_LEN);
                                }
-                               result->val = prefixVal;
-
                                status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyStringsToAllocMem, result);
+#else
+                               status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, prefixVal);
+#endif
                                Param_strerror((Param *) my, ca_message(status));
-
+#ifndef SYNCHRONOUS_GROUP
                                do {
-                                       status = ca_pend_event(TIMEOUTEVT);
-                               } while(*isReady == 1);
+                                       ca_pend_event(TIMEOUTEVT);
+                               } while(isReady == 1);
+#else
+                               if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) {
+                                       retVal = 0;
+                                       *rows = 0;
+                               } else if (status == ECA_NORMAL) {
+                                       retVal = 0;
+                                       *rows = maxrows > ca_element_count(chan) ? ca_element_count(chan) : maxrows;
+                               } else {
+                                       retVal = -1;
+                                       *rows = 0;
+                               }
+                               ca_sg_delete(pgid);
+#endif
 
                                for (i = 0 ; i < *rows ; i++) {
                                        if (*prefixVal[i] == '/') {
@@ -337,10 +416,9 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
                                        free(prefixVal[i]);
                                }
                        }
-               }
-
-               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);
@@ -360,7 +438,10 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
 
 int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *size, FILE **val)
 {
-       int isReadyS, *isReady = &isReadyS;
+#ifdef SYNCHRONOUS_GROUP
+       CA_SYNC_GID pgid;
+#endif
+       int isReady;
        int retVal = 0;
        int status;
        int found = 1;
@@ -377,8 +458,13 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si
                Param_strerror((Param *) my, ca_message(status));
                retVal = -1;
        } else {
-
-               if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
+#ifdef SYNCHRONOUS_GROUP
+               ca_sg_create(&pgid);
+#endif
+               do {
+                       status = ca_pend_io(TIMEOUTIO);
+               } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT));
+               if(status != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
                        found = 0;
                        retVal = 0;
@@ -390,25 +476,41 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si
                }
 
                if(found == 1) {
+#ifndef SYNCHRONOUS_GROUP
                        ParamBlobResult resultS, *result = &resultS;
                        result->val = val;
                        result->size = size;
                        result->my = my;
                        result->retVal = &retVal;
-                       result->isReady = isReady;
-                       *isReady = 1;
+                       result->isReady = &isReady;
+                       isReady = 1;
 
                        status = ca_array_get_callback(ca_field_type(chan), ca_element_count(chan), chan, Param_copyBlobToAllocMem, result);
+#else
+                       status = ca_sg_array_get(pgid, ca_field_type(chan), ca_element_count(chan), chan, val);
+#endif
+                       Param_strerror((Param *) my, ca_message(status));
+#ifndef SYNCHRONOUS_GROUP
+                               do {
+                                       ca_pend_event(TIMEOUTEVT);
+                               } while(isReady == 1);
+#else
+                               if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_TIMEOUT) {
+                                       retVal = 0;
+                                       *size = 0;
+                               } else if (status == ECA_NORMAL) {
+                                       retVal = 0;
+                                       *size = ca_element_count(chan) * sizeof(DBR_LONG);
+                               } else {
+                                       retVal = -1;
+                                       *size = 0;
+                               }
+                               ca_sg_delete(pgid);
+#endif
+               }
+               if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
-
-                       do {
-                               status = ca_pend_event(TIMEOUTEVT);
-                       } while(*isReady == 1);
                }
-       }
-
-       if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
-               Param_strerror((Param *) my, ca_message(status));
        }
 
        free(pPVName);
@@ -418,6 +520,9 @@ int Param_getBlob(const Param *my, const char *name, const char *idx, size_t *si
 
 int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned long int value)
 {
+#ifdef SYNCHRONOUS_GROUP
+       CA_SYNC_GID pgid;
+#endif
        int retVal = 0;
        int status;
        int found = 1;
@@ -434,19 +539,40 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned
                Param_strerror((Param *) my, ca_message(status));
                retVal = -1;
        } else {
-
-               if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
+#ifdef SYNCHRONOUS_GROUP
+               ca_sg_create(&pgid);
+#endif
+               do {
+                       status = ca_pend_io(TIMEOUTIO);
+               } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT));
+               if(status != ECA_NORMAL) {
                        Param_strerror((Param *) my, ca_message(status));
                        found = 0;
                        retVal = 0;
                }
                if(found == 1) {
-                       status = ca_put(DBR_LONG, chan, &value);
+#ifndef SYNCHRONOUS_GROUP
+                       ParamConfirmStoreStruct confirmS, *confirm = &confirmS;
+                       int isReady = 1;
+                       confirm->isReady = &isReady;
+                       
+                       status = ca_array_put_callback(DBR_LONG, 1, chan, &value, Param_confirmStore, confirm);
+#else
+                       status = ca_sg_array_put(pgid, DBR_LONG, 1, chan, &value);
+#endif
                        Param_strerror((Param *) my, ca_message(status));
-
-                       if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
-                               Param_strerror((Param *) my, ca_message(status));
+#ifndef SYNCHRONOUS_GROUP
+                       do {
+                               ca_pend_event(TIMEOUTEVT);
+                       } while(isReady == 1);
+#else
+                       if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_NORMAL) {
+                               retVal = 0;
+                       } else {
+                               retVal = -1;
                        }
+                       ca_sg_delete(pgid);
+#endif
                }
 
                if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
@@ -461,6 +587,9 @@ int Param_storeInt(const Param *my, const char *name, const char *idx, unsigned
 
 int Param_storeString(const Param *my, const char *name, const char *idx, const char *value)
 {
+#ifdef SYNCHRONOUS_GROUP
+       CA_SYNC_GID pgid;
+#endif
        int retVal = 0;
        int status;
        int found = 1;
@@ -477,19 +606,40 @@ int Param_storeString(const Param *my, const char *name, const char *idx, const
                Param_strerror((Param *) my, ca_message(status));
                retVal = -1;
        } else {
-
-               if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
+#ifdef SYNCHRONOUS_GROUP
+               ca_sg_create(&pgid);
+#endif
+               do {
+                       status = ca_pend_io(TIMEOUTIO);
+               } while ((ca_state(chan) != cs_conn) && (status != ECA_TIMEOUT));
+               if(status != 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));
+#ifndef SYNCHRONOUS_GROUP
+                       ParamConfirmStoreStruct confirmS, *confirm = &confirmS;
+                       int isReady = 1;
+                       confirm->isReady = &isReady;
 
-                       if((status = ca_pend_io(TIMEOUTIO)) != ECA_NORMAL) {
-                               Param_strerror((Param *) my, ca_message(status));
+                       status = ca_array_put_callback(DBR_STRING, 1, chan, value, Param_confirmStore, confirm);
+#else
+                       status = ca_sg_array_put(pgid, DBR_STRING, 1, chan, &value);
+#endif
+                       Param_strerror((Param *) my, ca_message(status));
+#ifndef SYNCHRONOUS_GROUP
+                       do {
+                               ca_pend_event(TIMEOUTEVT);
+                       } while(isReady == 1);
+#else
+                       if((status = ca_sg_block(pgid, TIMEOUTSG)) == ECA_NORMAL) {
+                               retVal = 0;
+                       } else {
+                               retVal = -1;
                        }
+                       ca_sg_delete(pgid);
+#endif
                }
 
                if((status = ca_clear_channel(chan)) != ECA_NORMAL) {
@@ -581,6 +731,12 @@ static void Param_copyBlobToAllocMem(struct event_handler_args args)
        *(result->isReady) = 0;
 }
 
+static void Param_confirmStore(struct event_handler_args args)
+{
+       ParamConfirmStoreStruct *result = args.usr;
+       *(result->isReady) = 0;
+}
+
 static void Param_returnPVName(const Param *my, const char *type, const char *name, const char *idx, char *pPVName)
 {
        int i;
index 27b8d3a52a251a567879c7e922d565559db75636..7bc8493f5bf60fcf0df3e5878668fb806962c543 100644 (file)
@@ -1,3 +1,4 @@
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/file/fileParam.c,v 1.18 2002-05-27 13:29:52 hadaq Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #include <unistd.h>
@@ -8,6 +9,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <sys/utsname.h>
 
 #include <allParam.h>
 
@@ -28,6 +30,8 @@ int conSetupParam(Param *my, const char *setup)
        char *storageFile;
        FILE *f;
        char buf[2 * (PARAM_MAX_NAME_LEN + 1)];
+       int row = 0;
+       struct utsname bufferS, *buffer = &bufferS;
 
        my->strerror = NULL;
        my->specParam = malloc(sizeof(FileParam));
@@ -89,6 +93,16 @@ int conSetupParam(Param *my, const char *setup)
        free(paramFile);
        free(storageFile);
 
+       if(retVal == 0) {
+               my->basedir = malloc(PARAM_MAX_VALUE_LEN);
+               uname(buffer);
+               if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) {
+                       strcpy(my->basedir, "");
+               } else if (strlen(my->basedir)) {
+                       strcat(my->basedir, "/");
+               }
+       }
+
        return retVal;
 }
 
@@ -100,6 +114,8 @@ int conParam(Param *my)
        FILE *f;
        char buf[2 * (PARAM_MAX_NAME_LEN + 1)];
        char *tmp;
+       int row = 0;
+       struct utsname bufferS, *buffer = &bufferS;
 
        my->strerror = NULL;
        my->setup = NULL;
@@ -166,6 +182,16 @@ int conParam(Param *my)
        free(paramFile);
        free(storageFile);
 
+       if(retVal == 0) {
+               my->basedir = malloc(PARAM_MAX_VALUE_LEN);
+               uname(buffer);
+               if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) {
+                       strcpy(my->basedir, "");
+               } else if (strlen(my->basedir)) {
+                       strcat(my->basedir, "/");
+               }
+       }
+
        return retVal;
 }
 
@@ -182,6 +208,7 @@ void desParam(Param *my)
        free((FileParam *) (my->specParam));
 
        fclose(((FileParam *) (my->specParam))->store);
+       free(my->basedir);
        if(my->setup != NULL) {
                free(my->setup);
        }
@@ -208,14 +235,9 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, int *r
                        strcpy(val, value);
                        *row = 1;
                } else {
-                       if ((Param_getString(my, "glob", "basedir", &rows, val) == 0) && (rows == 1)) {
-                               strcat(val, "/");
-                               strcat(val, value);
-                               *row = 1;
-                       } else {
-                               strcpy(val, value);
-                               *row = 1;
-                       }
+                       strcpy(val, my->basedir);
+                       strcat(val, value);
+                       *row = 1;
                }
        } else {
                *row = 0;
@@ -286,7 +308,6 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
 int Param_getFilenameArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val)
 {
        int retVal = 0;
-       int row = 0;
        int i;
        char *value[PARAM_MAX_ARRAY_LEN];
 
@@ -295,20 +316,14 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
        }
 
        if (((retVal = Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0) && (*rows > 0)) {
-               char basedir[PARAM_MAX_VALUE_LEN];
 
-               if ((Param_getString(my, "glob", "basedir", &row, basedir) == 0) && (row == 1)) {
-                       strcat(basedir, "/");
-               } else {
-                       strcpy(basedir, "");
-               }
                for (i = 0 ; i < *rows ; i++) {
                        if (value[i][0] != '/') {
-                               strcpy(val[i], basedir);
+                               strcpy(val[i], my->basedir);
+                               strcat(val[i], value[i]);
                        } else {
-                               strcpy(val[i], "");
+                               strcpy(val[i], value[i]);
                        }
-                       strcat(val[i], value[i]);
                }
        } else {
                *rows = 0;
index efaba356b5ca63f7fc923b08b121a8eb2023f074..6952d18c00b0ef94b6e3d220429c63bd4f13deac 100644 (file)
@@ -14,9 +14,10 @@ extern "C" {
 #define PARAM_MAX_NAME_LEN 128
 
 typedef struct ParamS {
-       char *strerror;
+       char *basedir;
        char *setup;
        void *specParam;
+       char *strerror;
 } Param;
 
 int conSetupParam(Param *, const char *);
index e509acd94502f314ad6bc95848777ee79be231a4..f4b47d71c00342b009341ac6c4f7c577bd31e1a7 100644 (file)
@@ -1,3 +1,4 @@
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/tcl/tclParam.c,v 1.21 2002-05-27 13:29:52 hadaq Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #include <unistd.h>
@@ -8,6 +9,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/stat.h>
+#include <sys/utsname.h>
 
 #include <tcl.h>
 
@@ -26,6 +28,8 @@ int conSetupParam(Param *my, const char *setup)
        char *paramFile;
        char *storageFile;
        int code;
+       int row = 0;
+       struct utsname bufferS, *buffer = &bufferS;
 
        my->strerror = NULL;
        my->specParam = malloc(sizeof(TclParam));
@@ -36,7 +40,6 @@ int conSetupParam(Param *my, const char *setup)
        } else {
                my->setup = NULL;
        }
-
        paramFile = malloc(((my->setup == NULL) ? strlen("default") : strlen(setup)) + strlen("_p.tcl") + 1);
        storageFile = malloc(((my->setup == NULL) ? strlen("default") : strlen(setup)) + strlen("_s.tcl") + 1);
        sprintf(paramFile, "%s_p.tcl", (my->setup == NULL) ? "default" : setup);
@@ -57,6 +60,16 @@ int conSetupParam(Param *my, const char *setup)
                retVal = -1;
        }
 
+       if(retVal == 0) {
+               my->basedir = malloc(PARAM_MAX_VALUE_LEN);
+               uname(buffer);
+               if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) {
+                       strcpy(my->basedir, "");
+               } else if (strlen(my->basedir)) {
+                       strcat(my->basedir, "/");
+               }
+       }
+
        free(paramFile);
        free(storageFile);
 
@@ -69,6 +82,8 @@ int conParam(Param *my)
        char *paramFile;
        char *storageFile;
        int code;
+       int row = 0;
+       struct utsname bufferS, *buffer = &bufferS;
 
        my->strerror = NULL;
        my->setup = NULL;
@@ -98,6 +113,16 @@ int conParam(Param *my)
                return -1;
        }
 
+       if(retVal == 0) {
+               my->basedir = malloc(PARAM_MAX_VALUE_LEN);
+               uname(buffer);
+               if(Param_getString(my, buffer->nodename, "basedir", &row, my->basedir) || (row != 1)) {
+                       strcpy(my->basedir, "");
+               } else if (strlen(my->basedir)) {
+                       strcat(my->basedir, "/");
+               }
+       }
+
        return retVal;
 }
 
@@ -107,6 +132,7 @@ void desParam(Param *my)
        fclose(((TclParam *) (my->specParam))->store);
 
        free((TclParam *) (my->specParam));
+       free(my->basedir);
        if(my->setup != NULL) {
                free(my->setup);
        }
@@ -131,17 +157,11 @@ int Param_getFilename(const Param *my, const char *name, const char *idx, int *r
        if (((retVal = Param_getString(my, name, idx, &rows, value)) == 0) && (rows == 1)) {
                if (value[0] == '/') {
                        strcpy(val, value);
-                       *row = 1;
                } else {
-                       if ((Param_getString(my, "glob", "basedir", &rows, val) == 0) && (rows == 1)) {
-                               strcat(val, "/");
-                               strcat(val, value);
-                               *row = 1;
-                       } else {
-                               strcpy(val, value);
-                               *row = 1;
-                       }
+                       strcpy(val, my->basedir);
+                       strcat(val, value);
                }
+               *row = 1;
        } else {
                *row = 0;
        }
@@ -211,7 +231,6 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx, int
 int Param_getFilenameArray(const Param *my, const char *name, const char *idx, int maxrows, int *rows, char **val)
 {
        int retVal = 0;
-       int row = 0;
        int i;
        char *value[PARAM_MAX_ARRAY_LEN];
 
@@ -220,20 +239,13 @@ int Param_getFilenameArray(const Param *my, const char *name, const char *idx, i
        }
 
        if (((retVal = Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0) && (*rows > 0)) {
-               char basedir[PARAM_MAX_VALUE_LEN];
-
-               if ((Param_getString(my, "glob", "basedir", &row, basedir) == 0) && (row == 1)) {
-                       strcat(basedir, "/");
-               } else {
-                       strcpy(basedir, "");
-               }
                for (i = 0 ; i < *rows ; i++) {
                        if (value[i][0] != '/') {
-                               strcpy(val[i], basedir);
+                               strcpy(val[i], my->basedir);
+                               strcat(val[i], value[i]);
                        } else {
-                               strcpy(val[i], "");
+                               strcpy(val[i], value[i]);
                        }
-                       strcat(val[i], value[i]);
                }
        } else {
                *rows = 0;