]> jspc29.x-matter.uni-frankfurt.de Git - daqdata.git/commitdiff
message callback also for param library
authorhadaq <hadaq>
Mon, 10 Jan 2005 15:54:45 +0000 (15:54 +0000)
committerhadaq <hadaq>
Mon, 10 Jan 2005 15:54:45 +0000 (15:54 +0000)
allParam/include/allParam.h
allParam/tcl/tclParam.c

index 1eaf74bc74b27e86f9b08f5ab922553b7c8b1d41..a6deddbe7a4e77b2366bc9fc1fe1dd7c5d5cb05f 100644 (file)
@@ -22,6 +22,8 @@ typedef struct ParamS {
        char *strerror;
 } Param;
 
+void Param_registerLogMsg(void (*f) (int, const char *, ...));
+
 /* constructors and destructor */
 int conSetupParam(Param *param, const char *setup);
 int conParam(Param *param);
index 7221b8f878f38ac3bc08bf9fbaa0f6defc7fab6a..abe80a77a8bfb2641244067efcc4f9aca7e8c7c1 100644 (file)
@@ -1,5 +1,4 @@
-static const char rcsId[] =
-       "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/tcl/tclParam.c,v 1.30 2003-07-01 16:05:49 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/tcl/tclParam.c,v 1.31 2005-01-10 15:54:45 hadaq Exp $";
 #define _POSIX_C_SOURCE 199509L
 
 #if HAVE_CONFIG_H
@@ -13,6 +12,7 @@ static const char rcsId[] =
 #ifdef PTHREADS
 #include <pthread.h>
 #endif                                                 /* PTHREADS */
+#include <stdarg.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -23,7 +23,54 @@ static const char rcsId[] =
 
 #include "../include/allParam.h"
 
-static void Param_strerror(Param *, const char *);
+/* Allow for registration of a user routine for output of error
+ * messages and provide a default one
+ * BUGBUG static variables will eventually break in multithreaded
+ * environment
+*/
+enum { verbEmerg = 0, verbErr = 3, verbDebug = 7 };
+
+static void defaultLogMsg(int priority, const char *message, ...)
+{
+       static int verbosity = -1;
+       va_list ap;
+
+       if (verbosity == -1) {
+               char *env;
+
+               env = getenv("PARAM_VERBOSITY");
+               if (env != NULL) {
+                       if (strcmp(env, "DEBUG") == 0) {
+                               verbosity = verbDebug;
+                       } else {
+                               verbosity = verbErr;
+                       }
+               }
+       }
+
+       if (priority <= verbosity) {
+               va_start(ap, message);
+               vfprintf(stderr, message, ap);
+               fputc('\n', stderr);
+               va_end(ap);
+       }
+}
+
+void (*ourLogMsg) (int, const char *, ...) = defaultLogMsg;
+
+void Param_registerLogMsg(void (*f) (int, const char *, ...))
+{
+       ourLogMsg = f;
+}
+
+static void Param_strerror(Param * my, const char *strerror)
+{
+       my->strerror = realloc(my->strerror, strlen(strerror) + 1);
+       if (my->strerror != NULL) {
+               strcpy(my->strerror, strerror);
+               ourLogMsg(verbErr, "tclParam: %s", strerror);
+       }
+}
 
 typedef struct TclParamS {
        Tcl_Interp *interp;
@@ -33,7 +80,7 @@ typedef struct TclParamS {
        FILE *store;
 } TclParam;
 
-int conSetupParam(Param *my, const char *setup)
+int conSetupParam(Param * my, const char *setup)
 {
        int retVal = 0;
        char *paramFile;
@@ -47,8 +94,7 @@ int conSetupParam(Param *my, const char *setup)
        my->specParam = malloc(sizeof(TclParam));
 
 #ifdef PTHREADS
-       ((TclParam *) (my->specParam))->interpLock =
-               malloc(sizeof(pthread_mutex_t));
+       ((TclParam *) (my->specParam))->interpLock = malloc(sizeof(pthread_mutex_t));
        pthread_mutex_init(((TclParam *) (my->specParam))->interpLock, NULL);
 #endif                                                 /* PTHREADS */
 
@@ -58,32 +104,21 @@ 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);
+       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);
-       sprintf(storageFile, "%s_s.tcl",
-                       (my->setup == NULL) ? "default" : setup);
+       sprintf(storageFile, "%s_s.tcl", (my->setup == NULL) ? "default" : setup);
 
 #ifdef PTHREADS
        if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) {
 #endif                                                 /* PTHREADS */
                ((TclParam *) (my->specParam))->interp = Tcl_CreateInterp();
-               code =
-                       Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile);
+               code = Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile);
                if (code != TCL_OK) {
                        if (*((TclParam *) (my->specParam))->interp->result != 0) {
-                               Param_strerror(my,
-                                                          ((TclParam *) (my->specParam))->interp->
-                                                          result);
+                               Param_strerror(my, ((TclParam *) (my->specParam))->interp->result);
                        } else {
-                               Param_strerror((Param *) my,
-                                                          "Tcl interpreter cannot read file correctly and does not deliver an error string.");
+                               Param_strerror((Param *) my, "Tcl interpreter cannot read file correctly and does not deliver an error string.");
                        }
                        retVal = -1;
                }
@@ -92,9 +127,7 @@ int conSetupParam(Param *my, const char *setup)
        }
 #endif                                                 /* PTHREADS */
 
-       if (NULL ==
-               (((TclParam *) (my->specParam))->store =
-                fopen(storageFile, "a+"))) {
+       if (NULL == (((TclParam *) (my->specParam))->store = fopen(storageFile, "a+"))) {
                retVal = -1;
        }
 
@@ -107,8 +140,7 @@ int conSetupParam(Param *my, const char *setup)
                        }
                        i++;
                }
-               if (Param_getString
-                       (my, buffer->nodename, "basedir", &row, my->basedir)
+               if (Param_getString(my, buffer->nodename, "basedir", &row, my->basedir)
                        || (row != 1)) {
                        if (Param_getString(my, "glob", "basedir", &row, my->basedir)
                                || (row != 1)) {
@@ -128,7 +160,7 @@ int conSetupParam(Param *my, const char *setup)
        return retVal;
 }
 
-int conParam(Param *my)
+int conParam(Param * my)
 {
        int retVal = 0;
        char *p;
@@ -144,8 +176,7 @@ int conParam(Param *my)
        my->specParam = malloc(sizeof(TclParam));
 
 #ifdef PTHREADS
-       ((TclParam *) (my->specParam))->interpLock =
-               malloc(sizeof(pthread_mutex_t));
+       ((TclParam *) (my->specParam))->interpLock = malloc(sizeof(pthread_mutex_t));
        pthread_mutex_init(((TclParam *) (my->specParam))->interpLock, NULL);
 #endif                                                 /* PTHREADS */
 
@@ -167,16 +198,12 @@ int conParam(Param *my)
        if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) {
 #endif                                                 /* PTHREADS */
                ((TclParam *) (my->specParam))->interp = Tcl_CreateInterp();
-               code =
-                       Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile);
+               code = Tcl_EvalFile(((TclParam *) (my->specParam))->interp, paramFile);
                if (code != TCL_OK) {
                        if (*((TclParam *) (my->specParam))->interp->result != 0) {
-                               Param_strerror(my,
-                                                          ((TclParam *) (my->specParam))->interp->
-                                                          result);
+                               Param_strerror(my, ((TclParam *) (my->specParam))->interp->result);
                        } else {
-                               Param_strerror((Param *) my,
-                                                          "Tcl interpreter cannot read file correctly and does not deliver an error string.");
+                               Param_strerror((Param *) my, "Tcl interpreter cannot read file correctly and does not deliver an error string.");
                        }
                        retVal = -1;
                }
@@ -185,9 +212,7 @@ int conParam(Param *my)
        }
 #endif                                                 /* PTHREADS */
 
-       if (NULL ==
-               (((TclParam *) (my->specParam))->store =
-                fopen(storageFile, "a+"))) {
+       if (NULL == (((TclParam *) (my->specParam))->store = fopen(storageFile, "a+"))) {
                return -1;
        }
 
@@ -200,8 +225,7 @@ int conParam(Param *my)
                        }
                        i++;
                }
-               if (Param_getString
-                       (my, buffer->nodename, "basedir", &row, my->basedir)
+               if (Param_getString(my, buffer->nodename, "basedir", &row, my->basedir)
                        || (row != 1)) {
                        if (Param_getString(my, "glob", "basedir", &row, my->basedir)
                                || (row != 1)) {
@@ -221,7 +245,7 @@ int conParam(Param *my)
        return retVal;
 }
 
-void desParam(Param *my)
+void desParam(Param * my)
 {
 #ifdef PTHREADS
        if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) {
@@ -243,20 +267,17 @@ void desParam(Param *my)
        free(my->setup);
 }
 
-int Param_getInt(const Param *my, const char *name, const char *idx,
-                                int *row, unsigned long int *val)
+int Param_getInt(const Param * my, const char *name, const char *idx, int *row, unsigned long int *val)
 {
        return Param_getIntArray(my, name, idx, 1, row, val);
 }
 
-int Param_getString(const Param *my, const char *name, const char *idx,
-                                       int *row, char *val)
+int Param_getString(const Param * my, const char *name, const char *idx, int *row, char *val)
 {
        return Param_getStringArray(my, name, idx, 1, row, &val);
 }
 
-int Param_getFilename(const Param *my, const char *name, const char *idx,
-                                         int *row, char *val)
+int Param_getFilename(const Param * my, const char *name, const char *idx, int *row, char *val)
 {
        int retVal = 0;
        int rows = 0;
@@ -277,8 +298,7 @@ int Param_getFilename(const Param *my, const char *name, const char *idx,
        return retVal;
 }
 
-int Param_getIntArray(const Param *my, const char *name, const char *idx,
-                                         int maxrows, int *rows, unsigned long int *val)
+int Param_getIntArray(const Param * my, const char *name, const char *idx, int maxrows, int *rows, unsigned long int *val)
 {
        int retVal = 0;
        int i;
@@ -289,15 +309,13 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx,
                strval[i] = malloc(PARAM_MAX_VALUE_LEN * sizeof(char));
        }
        *rows = 0;
-       if ((retVal |=
-                Param_getStringArray(my, name, idx, maxrows, rows, strval)) == 0) {
+       if ((retVal |= Param_getStringArray(my, name, idx, maxrows, rows, strval)) == 0) {
                for (i = 0; i < *rows; i++) {
                        val[i] = strtoul(strval[i], &endptr, 0);
                        if (*endptr != '\0') {
                                *rows = 0;
                                retVal = -1;
-                               Param_strerror((Param *) my,
-                                                          "Value seems to be no integer.");
+                               Param_strerror((Param *) my, "Value seems to be no integer.");
                        }
                }
        }
@@ -307,8 +325,7 @@ int Param_getIntArray(const Param *my, const char *name, const char *idx,
        return retVal;
 }
 
-int Param_getStringArray(const Param *my, const char *name, const char *idx,
-                                                int maxrows, int *rows, char **val)
+int Param_getStringArray(const Param * my, const char *name, const char *idx, int maxrows, int *rows, char **val)
 {
        int retVal = 0;
        int i;
@@ -326,22 +343,15 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx,
 #ifdef PTHREADS
        if (0 == pthread_mutex_lock(((TclParam *) (my->specParam))->interpLock)) {
 #endif                                                 /* PTHREADS */
-               if (Tcl_GetVar2
-                       (((TclParam *) (my->specParam))->interp, lname, lidx, 0) != 0) {
-                       strcpy(val[0],
-                                  Tcl_GetVar2(((TclParam *) (my->specParam))->interp,
-                                                          lname, lidx, 0));
+               if (Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, lidx, 0) != 0) {
+                       strcpy(val[0], Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, lidx, 0));
                        *rows = 1;
                } else {
                        char index[PARAM_MAX_NAME_LEN];
                        for (i = 0; i < maxrows; i++) {
                                sprintf(index, "%s%d", lidx, i);
-                               if (Tcl_GetVar2
-                                       (((TclParam *) (my->specParam))->interp, lname, index,
-                                        0) != 0) {
-                                       strcpy(val[i],
-                                                  Tcl_GetVar2(((TclParam *) (my->specParam))->
-                                                                          interp, lname, index, 0));
+                               if (Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, index, 0) != 0) {
+                                       strcpy(val[i], Tcl_GetVar2(((TclParam *) (my->specParam))->interp, lname, index, 0));
                                        (*rows)++;
                                } else {
                                        i = maxrows;
@@ -355,9 +365,7 @@ int Param_getStringArray(const Param *my, const char *name, const char *idx,
        return retVal;
 }
 
-int Param_getFilenameArray(const Param *my, const char *name,
-                                                  const char *idx, int maxrows, int *rows,
-                                                  char **val)
+int Param_getFilenameArray(const Param * my, const char *name, const char *idx, int maxrows, int *rows, char **val)
 {
        int retVal = 0;
        int i;
@@ -367,8 +375,7 @@ int Param_getFilenameArray(const Param *my, const char *name,
                value[i] = malloc(PARAM_MAX_VALUE_LEN);
        }
 
-       if (((retVal =
-                 Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0)
+       if (((retVal = Param_getStringArray(my, name, idx, maxrows, rows, value)) == 0)
                && (*rows > 0)) {
                for (i = 0; i < *rows; i++) {
                        if (value[i][0] != '/') {
@@ -389,8 +396,7 @@ int Param_getFilenameArray(const Param *my, const char *name,
        return retVal;
 }
 
-int Param_getBlob(const Param *my, const char *name, const char *idx,
-                                 size_t * size, FILE ** val)
+int Param_getBlob(const Param * my, const char *name, const char *idx, size_t * size, FILE ** val)
 {
        int retVal = 0;
        char filename[PARAM_MAX_VALUE_LEN];
@@ -411,8 +417,7 @@ int Param_getBlob(const Param *my, const char *name, const char *idx,
        return retVal;
 }
 
-int Param_storeInt(const Param *my, const char *name, const char *idx,
-                                  unsigned long int value)
+int Param_storeInt(const Param * my, const char *name, const char *idx, unsigned long int value)
 {
        char buf[7 + 2 * PARAM_MAX_NAME_LEN + PARAM_MAX_VALUE_LEN];
        sprintf(buf, "set %s(%s)\t%lu\n", name, idx, value);
@@ -429,8 +434,7 @@ int Param_storeInt(const Param *my, const char *name, const char *idx,
        return 0;
 }
 
-int Param_storeString(const Param *my, const char *name, const char *idx,
-                                         const char *value)
+int Param_storeString(const Param * my, const char *name, const char *idx, const char *value)
 {
        char buf[7 + 2 * PARAM_MAX_NAME_LEN + PARAM_MAX_VALUE_LEN];
        sprintf(buf, "set %s(%s)\t\"%s\"\n", name, idx, value);
@@ -447,19 +451,11 @@ int Param_storeString(const Param *my, const char *name, const char *idx,
        return 0;
 }
 
-void Param_clearCache(const Param *my)
+void Param_clearCache(const Param * my)
 {
 }
 
-const char *Param_getErrStr(const Param *my)
+const char *Param_getErrStr(const Param * my)
 {
        return my->strerror;
 }
-
-static void Param_strerror(Param *my, const char *strerror)
-{
-       my->strerror = realloc(my->strerror, strlen(strerror) + 1);
-       if (my->strerror != NULL) {
-               strcpy(my->strerror, strerror);
-       }
-}