diff -r 4eebab50993e -r 6d139c21e22c mash/rdconfig.c --- a/mash/rdconfig.c Sun Jul 15 14:08:19 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,286 +0,0 @@ -/***************************************************************************** - * Copyright (C) 2014 - * - * Michiel Broek - * - * This file is part of the mbsePi-apps - * - * This is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2, or (at your option) any - * later version. - * - * mbsePi-apps is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with EC-65K; see the file COPYING. If not, write to the Free - * Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. - *****************************************************************************/ - -#include "mash.h" -#include "xutil.h" - - -int debug = FALSE; -static char *mypath; -static char *k, *v; -static int linecnt = 0; -sys_config Config; /* System configuration */ - - - -static int getint(char **); -static int getw1(char **); - - -#define XSTR(x) #x -#define STR(x) XSTR(x) - -/* - * System configuration table - */ -key_list keytab[] = { - {(char *)"w1therm", getw1, (char **)&Config.w1therms}, - {(char *)"lcd_cols", getint, (char **)&Config.lcd_cols}, - {(char *)"lcd_rows", getint, (char **)&Config.lcd_rows}, - {NULL, NULL, NULL} -}; - - - -void killconfig(void) -{ - w1_therm *tmp1, *old1; - - if (Config.name) - free(Config.name); - Config.name = NULL; - - for (tmp1 = Config.w1therms; tmp1; tmp1 = old1) { - old1 = tmp1->next; - if (tmp1->master) - free(tmp1->master); - if (tmp1->name) - free(tmp1->name); - if (tmp1->alias) - free(tmp1->alias); - free(tmp1); - } - Config.w1therms = NULL; - Config.my_port = 6554; - - Config.lcd_cols = 16; - Config.lcd_rows = 2; -} - - - -int wrconfig(char *config) -{ - int rc = 0; - FILE *fp; - w1_therm *tmp1; - - if (getenv((char *)"USER") == NULL) { - mypath = xstrcpy((char *)"/root"); - } else { - mypath = xstrcpy(getenv((char *)"HOME")); - } - mypath = xstrcat(mypath, (char *)"/mbsepi-apps/"); - mypath = xstrcat(mypath, config); - - if (debug) - fprintf(stdout, "Writing %s\n", mypath); - - if ((fp = fopen(mypath, "w")) == NULL) { - syslog(LOG_NOTICE, "could not rewrite %s", mypath); - return 1; - } - - fprintf(fp, "# Configuration file for thermferm %s\n", VERSION); - fprintf(fp, "\n"); - - fprintf(fp, "# LCD display\n"); - fprintf(fp, "#\n"); - fprintf(fp, "lcd_cols %d\n", Config.lcd_cols); - fprintf(fp, "lcd_rows %d\n", Config.lcd_rows); - fprintf(fp, "\n"); - - fprintf(fp, "# DS18B20 temperature sensors on the 1-wire bus.\n"); - fprintf(fp, "#\n"); - fprintf(fp, "# kwd master bus name alias\n"); - for (tmp1 = Config.w1therms; tmp1; tmp1 = tmp1->next) { - fprintf(fp, "w1therm %s %d %s %s\n", tmp1->master, tmp1->bus, tmp1->name, tmp1->alias); - } - fprintf(fp, "\n"); - - fprintf(fp, "# End of generated configuration\n"); - fclose(fp); - syslog(LOG_NOTICE, "Written %s rc=%d", mypath, rc); - free(mypath); - mypath = NULL; - - return rc; -} - - - -int rdconfig(char *config) -{ - char buf[256], *p; - FILE *fp; - int i, rc = 0; - - killconfig(); - - syslog(LOG_NOTICE, "HOME='%s' USER='%s' LOGNAME='%s'", MBSE_SS(getenv((char *)"HOME")), MBSE_SS(getenv((char *)"USER")), MBSE_SS(getenv((char *)"LOGNAME"))); - - /* - * Search config file - */ - if (getenv((char *)"USER") == NULL) { - mypath = xstrcpy((char *)"/root"); - } else { - mypath = xstrcpy(getenv((char *)"HOME")); - } - mypath = xstrcat(mypath, (char *)"/mbsepi-apps/"); - mypath = xstrcat(mypath, config); - if ((fp = fopen(mypath, "r")) == NULL) { - /* - * Not in the users home directory - */ - free(mypath); - mypath = xstrcpy((char *)"/etc/mbsepi-apps/"); - mypath = xstrcat(mypath, config); - if ((fp = fopen(mypath, "r")) == NULL) { - /* - * Try /usr/local/etc - */ - free(mypath); - mypath = xstrcpy((char *)"/usr/local/etc/mbsepi-apps/"); - mypath = xstrcat(mypath, config); - if ((fp = fopen(mypath, "r")) == NULL) { - syslog(LOG_NOTICE, "rdconfig: could find %s", config); - return 1; - } - } - } - syslog(LOG_NOTICE, "rdconfig: using %s", mypath); - - linecnt = 0; - while (fgets(buf, sizeof(buf) -1, fp)) { - linecnt++; - if (*(p = buf + strlen(buf) -1) != '\n') { - syslog(LOG_NOTICE, "rdconfig: %s(%d): \"%s\" - line too long", mypath, linecnt, buf); - rc = 1; - break; - } - *p-- = '\0'; - while ((p >= buf) && isspace(*p)) - *p-- = '\0'; - k = buf; - while (*k && isspace(*k)) - k++; - p = k; - while (*p && !isspace(*p)) - p++; - *p++='\0'; - v = p; - while (*v && isspace(*v)) - v++; - - if ((*k == '\0') || (*k == '#')) { - continue; - } - - for (i = 0; keytab[i].key; i++) - if (strcasecmp(k,keytab[i].key) == 0) - break; - - if (keytab[i].key == NULL) { - syslog(LOG_NOTICE, "rdconfig: %s(%d): %s %s - unknown keyword", mypath, linecnt, MBSE_SS(k), MBSE_SS(v)); - rc = 1; - break; - } else if ((keytab[i].prc(keytab[i].dest))) { - rc = 1; - break; - } - - } - fclose(fp); - - free(mypath); - mypath = NULL; - - return rc; -} - - - -static int getint(char **dest) -{ - if (debug) - syslog(LOG_NOTICE, "rdconfig: getint: %s(%d): %s %s", mypath, linecnt, MBSE_SS(k), MBSE_SS(v)); - - if (strspn(v,"0123456789") != strlen(v)) - syslog(LOG_NOTICE, "rdconfig: %s(%d): %s %s - bad numeric", mypath, linecnt, MBSE_SS(k), MBSE_SS(v)); - else - *((int*)dest)=atoi(v); - return 0; -} - - - -static int getw1(char **dest) -{ - char *p, *q = NULL, *r = NULL; - w1_therm **tmpm; - int rc = 0, tmpp; - - for (p = v; *p && !isspace(*p); p++); - if (*p) - *p++ = '\0'; - while (*p && isspace(*p)) - p++; - if (*p == '\0') { - syslog(LOG_NOTICE, "rdconfig: %s(%d): less then two tokens", mypath, linecnt); - return 1; - } - - for (q = p; *q && !isspace(*q); q++); - if (*q && isspace(*q)) { - if (*q) - *q++ = '\0'; - while (*q && isspace(*q)) - q++; - - for (r = q; *r && !isspace(*r); r++); - if (*r) - *r++ = '\0'; - rc = sscanf(p, "%d", &tmpp); - if (rc != 1) { - syslog(LOG_NOTICE, "rdconfig: getw1: %s(%d): %s is not a integer value", mypath, linecnt, p); - return 1; - } - if (debug) - syslog(LOG_NOTICE, "rdconfig: getw1: %s(%d): %s %d %s %s", mypath, linecnt, v, tmpp, q, r); - } - - for (tmpm = (w1_therm**)dest; *tmpm; tmpm=&((*tmpm)->next)); - (*tmpm) = (w1_therm *) xmalloc(sizeof(w1_therm)); - (*tmpm)->next = NULL; - (*tmpm)->master = xstrcpy(v); - (*tmpm)->bus = tmpp; - (*tmpm)->name = xstrcpy(q); - (*tmpm)->alias = xstrcpy(r); - (*tmpm)->present = 0; - (*tmpm)->lastval = 0; - (*tmpm)->update = 0; - - return 0; -} - -