From 998fe30dc57559b00b4cef121ee45a0afd5c8d93 Mon Sep 17 00:00:00 2001 From: ltoetsch <> Date: Thu, 8 Mar 2001 15:25:38 +0000 Subject: [lcd4linux @ 2001-03-08 15:25:38 by ltoetsch] improved exec --- exec.c | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 74 insertions(+), 15 deletions(-) (limited to 'exec.c') diff --git a/exec.c b/exec.c index 2617206..3c7c8de 100644 --- a/exec.c +++ b/exec.c @@ -1,4 +1,4 @@ -/* $Id: exec.c,v 1.2 2001/03/08 08:39:54 reinelt Exp $ +/* $Id: exec.c,v 1.3 2001/03/08 15:25:38 ltoetsch Exp $ * * exec ('x*') functions * @@ -20,6 +20,9 @@ * * * $Log: exec.c,v $ + * Revision 1.3 2001/03/08 15:25:38 ltoetsch + * improved exec + * * Revision 1.2 2001/03/08 08:39:54 reinelt * * fixed two typos @@ -28,43 +31,99 @@ * added e(x)ec commands * * + * This implements the x1 .. x9 commands + * config options: + * x1 .. x9 command to execute + * Tick_x1 ... 9 delay in ticks + * Delay_x1 .. 9 delay in seconds + * Scale_x1 .. 9 scale for bars */ #include +#include +#include #include +#include +#include +#define IN_EXEC #include "exec.h" #include "debug.h" #include "cfg.h" -int Exec(int index, char buff[EXEC_TXT_LEN]) +int Exec(int index, char buff[EXEC_TXT_LEN], double *val) { - static time_t now = 0; - char *command; - char xn[4]; + static time_t now[EXECS+1]; + static int errs[EXECS+1]; + static int ticks[EXECS+1]; + char *command, *p; + char xn[20]; + char env[EXEC_TXT_LEN]; FILE *pipe; + size_t len; + int i; + + if (index < 1 || index > EXECS) + return -1; + if (errs[index]) + return -1; - if (time(NULL) <= now+EXEC_WAIT) - return 0; - time(&now); + /* first time ? */ + if (now[index] != 0) { + /* delay in Ticks ? */ + sprintf(xn, "Tick_x%d", index); + p = cfg_get(xn); + if (p && *p) { + if (ticks[index]++ % atoi(p) != 0) + return 0; + } + else { + sprintf(xn, "Delay_x%d", index); + /* delay in Delay_x* sec ? */ + if (time(NULL) <= now[index] + atoi(cfg_get(xn)?:"1")) + return 0; + } + } + time(&now[index]); + *val = -1; sprintf(xn, "x%d", index); command = cfg_get(xn); - debug("command%d = %s:%s",index,xn,command); + debug("%s:'%s'",xn,command); - if (!*command) { + if (!command || !*command) { error("Empty command for 'x%d'", index); + errs[index]++; return -1; } - + for (i = 1; i < index; i++) { + sprintf(env, "X%d=%.*s", i, EXEC_TXT_LEN-10, exec[i].s); + putenv(env); + } + putenv("PATH=/usr/local/bin:/usr/bin:/bin"); pipe = popen(command, "r"); if (pipe == NULL) { - error("Couln't run pipe '%s'", command); + error("Couldn't run pipe '%s':\n%s", command, strerror(errno)); + errs[index]++; + return -1; + } + len = fread(buff, 1, EXEC_TXT_LEN-1, pipe); + if (len <= 0) { + pclose(pipe); + error("Couldn't fread from pipe '%s', len=%d", command, len); + errs[index]++; + *buff = '\0'; return -1; } - fread(buff, EXEC_TXT_LEN, 1, pipe); - fclose(pipe); - buff[EXEC_TXT_LEN-1] = '\0'; + pclose(pipe); + buff[len] = '\0'; + for (p = buff ; *p && isspace(*p); p++) + ; + if (isdigit(*p)) { + *val = atof(p); + sprintf(xn, "Scale_x%d", index); + *val /= atoi(cfg_get(xn)?:"100")?:100; + } return 0; } -- cgit v1.2.3