--- embedtools/src/cfger.c 2014/01/30 00:55:19 1.1.2.2 +++ embedtools/src/cfger.c 2017/06/30 08:41:50 1.5 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ - * $Id: cfger.c,v 1.1.2.2 2014/01/30 00:55:19 misho Exp $ + * $Id: cfger.c,v 1.5 2017/06/30 08:41:50 misho Exp $ * ************************************************************************* The ELWIX and AITNET software is distributed under the following @@ -12,7 +12,7 @@ terms: All of the documentation and software included in the ELWIX and AITNET Releases is copyrighted by ELWIX - Sofia/Bulgaria -Copyright 2004 - 2014 +Copyright 2004 - 2017 by Michael Pounov . All rights reserved. Redistribution and use in source and binary forms, with or without @@ -60,9 +60,13 @@ Usage() "=== %s === %s@%s ===\n\n" " Syntax: cfger [options] [data]\n\n" "\t-v\t\tVerbose ...\n" - "\t-q\t\tQuiet mode\n" + "\t-q\t\tQuiet mode in Get variable mode. Output is only variable value\n" + "\t-S\t\tShell script mode, without whitespaces between attribute and value\n" + "\t-C\t\tWithout program comment header\n" + "\t-J\t\tFilter output, just variables, exclude entire different data from a/v pair\n" "\t-o \tOutput result to file\n" - "\t-l \tList A/V pair\n" + "\t-l\t\tList A/V pairs\n" + "\t-c \tAdds comment on program header of file\n" "\t-s \tSet A/V pair\n" "\t-g \tGet value from A/V pair\n" "*\"attr\" format: [section/]attribute\n" @@ -72,12 +76,16 @@ Usage() int main(int argc, char **argv) { - char ch, *str, m = 0, q = 0, szAttr[STRSIZ], szName[PATH_MAX] = { 0 }; + char ch, *str, m = 0, q = 0, sh = 42, jv = 0, szAttr[STRSIZ], szName[PATH_MAX] = { 0 }; int ret = 0; ait_val_t data = AIT_VAL_INITIALIZER(data); FILE *out = stdout; + time_t tim; + struct tm tm; + char cm = 42, szComment[STRSIZ] = { [0 ... STRSIZ - 1] = 0 }, szTim[STRSIZ] = { 0 }; + ait_val_t *v; - while ((ch = getopt(argc, argv, "hvql:s:g:o:")) != -1) + while ((ch = getopt(argc, argv, "hvqlSJCs:g:o:c:")) != -1) switch (ch) { case 'v': Verbose++; @@ -85,16 +93,27 @@ main(int argc, char **argv) case 'q': q = 42; break; + case 'S': + sh ^= sh; + break; + case 'C': + cm ^= cm; + break; + case 'J': + jv = 42; + break; case 'o': strlcpy(szName, optarg, sizeof szName); break; + case 'c': + strlcpy(szComment, optarg, sizeof szComment); + break; case 'l': if (m) { Usage(); return 1; } else m = 'l'; - strlcpy(szAttr, optarg, sizeof szAttr); break; case 's': if (m) { @@ -172,7 +191,21 @@ main(int argc, char **argv) } case 'l': default: - cfgWriteConfig(out, &cfg, 42); + if (cm) { + time(&tim); + localtime_r(&tim, &tm); + strftime(szTim, sizeof szTim, "%Y-%m-%d %H:%M:%S", &tm); + + fprintf(out, "# Auto-generated file %s from cfger at %s\n#\n# %s\n\n", *argv, szTim, szComment); + } + + if (jv) + cfgWriteConfig(out, &cfg, sh); + else { + v = cfgWriteLines(out, NULL, NULL, NULL, &cfg); + ait_freeVar(&v); + } + break; } end: