--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lib/rdconfig.c Wed Apr 23 14:25:09 2014 +0200 @@ -0,0 +1,231 @@ +/***************************************************************************** + * Copyright (C) 2008-2014 + * + * Michiel Broek <mbroek at mbse dot eu> + * + * 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 "../config.h" +#include "mbselib.h" + +// #define DEBUG_CONFIG 1 + + +extern int DebugEmu; +extern char *Private_Path; + +static char *mypath; +static char *k, *v; +static int linecnt = 0; + +extern int MustSave; + + +sys_config Config; /* System configuration */ + + + +static int getstr(char **); +static int getint(char **); +//static int getbyt(char **); +//static int gethex(char **); + + + +/* + * System configuration table + */ +key_list keytab[] = { + {(char *)"name", getstr, &Config.name}, + {(char *)"mosq_server", getstr, &Config.mosq_server}, + {(char *)"mosq_port", getint, (char **)&Config.mosq_port}, + {NULL, NULL, NULL} +}; + + + +void killconfig(void) +{ + if (Config.name) + free(Config.name); + Config.name = NULL; + +} + + + +int wrconfig(char *machine) +{ + FILE *fp; + + /* + * Get config from the system path + */ + mypath = xstrcpy(Private_Path); + mypath = xstrcat(mypath, (char *)"/data/machines/"); + mypath = xstrcat(mypath, machine); + mypath = xstrcat(mypath, (char *)".conf"); + + if ((fp = fopen(mypath, "w")) == NULL) { +// Log_Msg("[rdconfig] could not rewrite %s", mypath); + return 1; + } + + fprintf(fp, "# Configuration file for EC65K %s\n", VERSION); + fprintf(fp, "# Machine: `%s'\n", machine); + fprintf(fp, "#\n"); +// fprintf(fp, "description %s\n", Config.description); +// fprintf(fp, "\n"); +// fprintf(fp, "# 65(C)02 CPU\n"); +// fprintf(fp, "#\n"); + + fprintf(fp, "# End of generated configuration\n"); + fclose(fp); + free(mypath); + mypath = NULL; + MustSave = FALSE; + + return 0; +} + + + +int rdconfig(char *machine) +{ + char buf[256], *p; + FILE *fp; + int i, rc = 0; + + killconfig(); + + /* + * Get config from the system path + */ + mypath = xstrcpy(Private_Path); + mypath = xstrcat(mypath, (char *)"/data/machines/"); + mypath = xstrcat(mypath, machine); + mypath = xstrcat(mypath, (char *)".conf"); + + if ((fp = fopen(mypath, "r")) == NULL) { +// Log_Msg("[rdconfig] could not open %s", mypath); + return 1; + } + + linecnt = 0; + while (fgets(buf, sizeof(buf) -1, fp)) { + linecnt++; + if (*(p = buf + strlen(buf) -1) != '\n') { +// Log_Msg("[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) { +// Log_Msg("[rdconfig] %s(%d): %s %s - unknown keyword", mypath, linecnt, S(k), S(v)); + rc = 1; + break; + } else if ((keytab[i].prc(keytab[i].dest))) { + rc = 1; + break; + } + + } + fclose(fp); + + free(mypath); + mypath = NULL; + MustSave = FALSE; + + return rc; +} + + + +static int getstr(char **dest) +{ +// Log_Msg("[rdconfig] getstr: %s(%d): %s %s", mypath, linecnt, S(k), S(v)); + *dest = xstrcpy(v); + return 0; +} + + + +static int getint(char **dest) +{ +// Log_Msg("[rdconfig] getint: %s(%d): %s %s", mypath, linecnt, k, v); +// if (strspn(v,"0123456789") != strlen(v)) +// Log_Msg("[rdconfig] %s(%d): %s %s - bad numeric", mypath, linecnt, S(k), S(v)); +// else + *((int*)dest)=atoi(v); + return 0; +} + + +/* +static int getbyt(char **dest) +{ + Log_Msg("[rdconfig] getbyt: %s(%d): %s %s", mypath, linecnt, k, v); + if (strspn(v,"0123456789") != strlen(v)) + Log_Msg("[rdconfig] %s(%d): %s %s - bad numeric", mypath, linecnt, S(k), S(v)); + else + *((Uint8*)dest)=atoi(v); + return 0; +} +*/ + + +/* +static int gethex(char **dest) +{ + unsigned int val = 0; + int rc; + + Log_Msg("[rdconfig] gethex: %s(%d): %s %s", mypath, linecnt, k, v); + rc = sscanf(v, "%08x", &val); + if (rc != 1) { + Log_Msg("[rdconfig] %s(%d): %s %s - bad hex value", mypath, linecnt, S(k), S(v)); + return 1; + } + *((int*)dest) = val; + + return 0; +} +*/ + +