|
|
| version 1.1, 2025/01/30 12:28:41 | version 1.1.2.3, 2025/01/30 14:34:25 |
|---|---|
| Line 0 | Line 1 |
| #include "global.h" | |
| #include "aitcfg.h" | |
| cfg_root_t cfg; | |
| char cfgname[MAXPATHLEN], section[STRSIZ]; | |
| static void | |
| Usage(const char *prog) | |
| { | |
| printf( " -= CFGPROG =- ELWIX config tool ver.%s\n" | |
| "(C)`25 by Michael Pounov <misho@elwix.org>\n" | |
| "==========================================\n" | |
| " Syntax: %s [-options] <config> [attribute] [value]\n\n" | |
| "\t-s <section>\tScope of attribute\n" | |
| "\t-w\t\tSet and write attribute\n" | |
| "\t-v\t\tVerbose, more -v more verbosity\n" | |
| "\t-h\t\tHelp, this help screen!\n", | |
| PACKAGE_VERSION, prog); | |
| } | |
| int | |
| Get(const char *prog, int argc, char **argv) | |
| { | |
| const char *str; | |
| int i, ret = 0; | |
| array_t *sec; | |
| struct tagCfg *av; | |
| EVERBS(1) printf("Get value for %s in scope %s from config %s\n", | |
| *argv ? *argv : "*", section, prog); | |
| if (*argv) { | |
| str = cfg_getAttribute(&cfg, section, *argv); | |
| if (str) | |
| printf("%s=%s\n", *argv, str); | |
| else | |
| ret = 3; | |
| } else { | |
| sec = cfg_getSection(&cfg, section); | |
| if (sec) { | |
| for (i = 0; i < array_Size(sec) && | |
| (av = array(sec, i, struct tagCfg*)); i++) { | |
| if (AIT_GET_STR(&av->cfg_attr)) | |
| printf("%s=%s\n", | |
| AIT_GET_STR(&av->cfg_attr), | |
| AIT_GET_STR(&av->cfg_val)); | |
| } | |
| array_Destroy(&sec); | |
| } else | |
| ret = 3; | |
| } | |
| return ret; | |
| } | |
| int | |
| Set(const char *prog, int argc, char **argv) | |
| { | |
| if (argc < 2) { | |
| printf("Error:: missing attribute and value arguments!\n"); | |
| return 1; | |
| } | |
| EVERBS(1) printf("Set value %s for %s in scope %s from config %s\n", | |
| argv[1], argv[0], section, prog); | |
| return 0; | |
| } | |
| int | |
| main(int argc, char **argv) | |
| { | |
| int ch, ret = 0; | |
| int (*run)(const char*, int, char**) = Get; | |
| const char *prog; | |
| char *str; | |
| if (!argv || !*argv) | |
| prog = "cfgprog"; | |
| else if (!(prog = strrchr(*argv, '/'))) | |
| prog = *argv; | |
| else | |
| prog++; | |
| while ((ch = getopt(argc, argv, "hvws:")) != -1) | |
| switch (ch) { | |
| case 'w': | |
| run = Set; | |
| break; | |
| case 's': | |
| strlcpy(section, optarg, sizeof section); | |
| break; | |
| case 'v': | |
| e_incVerbose; | |
| break; | |
| default: | |
| Usage(prog); | |
| return 1; | |
| } | |
| argc -= optind; | |
| argv += optind; | |
| if (!strcmp(prog, "cfg_set")) | |
| run = Set; | |
| else if (!strcmp(prog, "cfg_get")) | |
| run = Get; | |
| if (!argc) { | |
| printf("Error:: missing config name!\n"); | |
| Usage(prog); | |
| return 1; | |
| } else { | |
| strlcpy(cfgname, *argv, sizeof cfgname); | |
| argc--; | |
| argv++; | |
| } | |
| if (argc && *argv && (str = strchr(*argv, '/'))) { | |
| *str++ = 0; | |
| strlcpy(section, *argv, sizeof section); | |
| *argv = str; | |
| } | |
| if (cfgLoadConfig(cfgname, &cfg)) { | |
| printf("Error:: load config %s #%d - %s\n", | |
| cfgname, cfg_GetErrno(), cfg_GetError()); | |
| return 2; | |
| } | |
| ret = run(prog, argc, argv); | |
| cfgUnloadConfig(&cfg); | |
| return ret; | |
| } |