#define _POSIX_C_SOURCE 199509L
+#include <unistd.h>
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
#include "param.h"
int conParam(Param *my)
{
- return 0;
+ int retVal;
+ char *fileName;
+ int code;
+
+ fileName = getenv("DAQSLOW_PARAM_FILE");
+ if (fileName == NULL) {
+ fileName = "param.tcl";
+ }
+ my->interp = Tcl_CreateInterp();
+ code = Tcl_EvalFile(my->interp, fileName);
+ if (*my->interp->result != 0) {
+ fprintf(stderr, "opening param file: %s\n", my->interp->result);
+ retVal = -1;
+ } else {
+ if (code != TCL_OK) {
+ retVal = -1;
+ } else {
+ retVal = 0;
+ }
+ }
+ return retVal;
}
void desParam(Param *my)
{
+ Tcl_DeleteInterp(my->interp);
}
-int Param_getInt(const Param *my, const char *n, const char *i, int *v)
+int Param_getInt(const Param *my, const char *name, const char *idx, int *val)
{
- return Param_getIntArray(my, n, i, 1, v);
+ int status;
+ char valstr[PARAM_MAX_VALUE_LEN];
+ char *endptr;
+ if ((status = Param_getString(my, name, idx, valstr)) != 1) {
+ msglog(LOG_ERR, "Error: cannot get Parameter %s as a string", idx);
+ return status;
+ }
+ *val = strtoul(valstr, &endptr, 0);
+ if (*endptr == '\0') {
+ return PARAM_RV_NO_INT;
+ }
+ return 1;
}
-int Param_getString(const Param *my, const char *n, const char *i, char *v)
+int Param_getString(const Param *my, const char *name, const char *idx, char *val)
{
- return Param_getStringArray(my, n, i, 1, &v);
+ strcpy(val, Tcl_GetVar2(my->interp, (char *) name, (char *) idx, 0));
+ if (val == NULL) {
+ val = "";
+ fprintf(stderr,
+ "Parameter %s(%s) not found, default is \"\"\n", name, idx);
+ return 0;
+ }
+ return 1;
}
-int Param_getIntArray(const Param *my, const char *n, const char *i, int num, int *v)
+int Param_getIntArray(const Param *my, const char *name, const char *idx, int num, int *val)
{
- for (int i = 0 ; i<num ; i++) {
- v[i] = 0;
+ int status;
+ int tmp;
+ char index[PARAM_MAX_NAME_LEN];
+ for (int i = 0 ; i < num ; i++) {
+ sprintf(index,"%s%d", idx, i);
+ if ((tmp = Param_getInt(my, name, index, val[i]) == 1) && (status >= 0)) {
+ status++;
+ } else {
+ status = tmp;
+ }
}
- return num;
+
+ return status;
}
-int Param_getStringArray(const Param *my, const char *n, const char *i, int num, char **v)
+int Param_getStringArray(const Param *my, const char *name, const char *idx, int num, char **val)
{
- for (int i = 0 ; i<num ; i++) {
- v[i] = "Blub";
+ int status;
+ int tmp;
+ char index[PARAM_MAX_NAME_LEN];
+ for (int i = 0 ; i < num ; i++) {
+ sprintf(index,"%s%d", idx, i);
+ if ((tmp = Param_getString(my, name, index, val[i]) == 1) && (status >= 0)) {
+ status++;
+ } else {
+ status = tmp;
+ }
}
- return num;
+
+ return status;
}