00001 #include "uniconfroot.h"
00002 #include "wvlogrcv.h"
00003 #include "strutils.h"
00004 #include "wvtclstring.h"
00005
00006 int main(int argc, char **argv)
00007 {
00008 WvLogConsole logcon(2, WvLog::Info);
00009
00010 const char *confuri = getenv("UNICONF");
00011 if (!confuri)
00012 {
00013 fprintf(stderr, "%s: UNICONF environment variable not set!\n",
00014 argv[0]);
00015 return 2;
00016 }
00017
00018 if (argc < 3)
00019 {
00020 fprintf(stderr,
00021 "Usage: %s <cmd> <key> [extra stuff...]\n"
00022 " where <cmd> is one of:\n"
00023 " get - get the value of a key, with optional default\n"
00024 " set - set a key to the given value from the command line\n"
00025 " xset - set a key to the given value from stdin\n"
00026 " keys - list the subkeys of a key\n"
00027 " hkeys - list the subkeys of a key, their subkeys, etc\n"
00028 " dump - list the subkeys/values of a key (key=value)\n"
00029 " hdump - list the subkeys/values recursively\n",
00030 argv[0]);
00031 return 3;
00032 }
00033
00034 UniConfRoot cfg(confuri);
00035
00036
00037
00038
00039 const char *_cmd = argv[1], *arg1 = argv[2],
00040 *arg2 = argc > 3 ? argv[3] : NULL;
00041 WvString cmd(_cmd);
00042 strlwr(cmd.edit());
00043
00044 if (cmd == "get")
00045 {
00046 WvString val = cfg[arg1].get(arg2);
00047 if (!val.isnull())
00048 {
00049 fputs(val, stdout);
00050
00051 return 0;
00052 }
00053 else
00054 return 1;
00055 }
00056 else if (cmd == "set")
00057 {
00058 cfg[arg1].set(arg2);
00059 cfg.commit();
00060 return 0;
00061 }
00062 else if (cmd == "xset")
00063 {
00064
00065 WvDynBuf buf;
00066 size_t len;
00067 char *cptr;
00068 while (wvcon->isok())
00069 {
00070 cptr = (char *)buf.alloc(10240);
00071 len = wvcon->read(cptr, 10240);
00072 buf.unalloc(10240 - len);
00073 }
00074 cfg[arg1].set(buf.getstr());
00075 cfg.commit();
00076 return 0;
00077 }
00078 else if (cmd == "keys")
00079 {
00080 UniConf::Iter i(cfg[arg1]);
00081 for (i.rewind(); i.next(); )
00082 wvcon->print("%s\n", wvtcl_escape(i->key(), "\r\n"));
00083 }
00084 else if (cmd == "hkeys")
00085 {
00086 UniConf sub(cfg[arg1]);
00087 UniConf::RecursiveIter i(sub);
00088 for (i.rewind(); i.next(); )
00089 wvcon->print("%s\n", wvtcl_escape(i->fullkey(sub), "\r\n"));
00090 }
00091 else if (cmd == "dump")
00092 {
00093
00094
00095 UniConf::Iter i(cfg[arg1]);
00096 for (i.rewind(); i.next(); )
00097 wvcon->print("%s = %s\n",
00098 wvtcl_escape(i->key(), "\r\n[]="),
00099 wvtcl_escape(i->get(""), "\r\n[]="));
00100 }
00101 else if (cmd == "hdump")
00102 {
00103
00104
00105 UniConf sub(cfg[arg1]);
00106 UniConf::RecursiveIter i(sub);
00107 for (i.rewind(); i.next(); )
00108 wvcon->print("%s = %s\n",
00109 wvtcl_escape(i->fullkey(sub), "\r\n[]="),
00110 wvtcl_escape(i->get(""), "\r\n[]="));
00111 }
00112 else
00113 {
00114 fprintf(stderr, "%s: unknown command '%s'!\n", argv[0], _cmd);
00115 return 4;
00116 }
00117 }