Switch to side-by-side view

--- a/src/common/rclconfig.cpp
+++ b/src/common/rclconfig.cpp
@@ -1,5 +1,5 @@
 #ifndef lint
-static char rcsid[] = "@(#$Id: rclconfig.cpp,v 1.32 2006-10-24 09:09:36 dockes Exp $ (C) 2004 J.F.Dockes";
+static char rcsid[] = "@(#$Id: rclconfig.cpp,v 1.33 2006-11-20 15:28:14 dockes Exp $ (C) 2004 J.F.Dockes";
 #endif
 /*
  *   This program is free software; you can redistribute it and/or modify
@@ -200,6 +200,8 @@
 	    // iso-8859. Some won't take iso8859
 	    localecharset = string("ISO-8859-1");
 	}
+	LOGDEB(("RclConfig::getDefCharset: localecharset [%s]\n",
+		localecharset.c_str()));
     }
 
     if (defcharset.empty()) {
@@ -481,22 +483,80 @@
 #include "rclinit.h"
 #include "rclconfig.h"
 
-int main(int, const char **)
-{
+static char *thisprog;
+
+static char usage [] =
+"  \n\n"
+;
+static void
+Usage(void)
+{
+    fprintf(stderr, "%s: usage:\n%s [-s subkey] [-q param]", thisprog, usage);
+    exit(1);
+}
+
+static int     op_flags;
+#define OPT_MOINS 0x1
+#define OPT_s	  0x2 
+#define OPT_q	  0x4 
+
+int main(int argc, char **argv)
+{
+    string pname, skey;
+    
+    thisprog = argv[0];
+    argc--; argv++;
+
+    while (argc > 0 && **argv == '-') {
+	(*argv)++;
+	if (!(**argv))
+	    /* Cas du "adb - core" */
+	    Usage();
+	while (**argv)
+	    switch (*(*argv)++) {
+	    case 's':	op_flags |= OPT_s; if (argc < 2)  Usage();
+		skey = *(++argv);
+		argc--; 
+		goto b1;
+	    case 'q':	op_flags |= OPT_q; if (argc < 2)  Usage();
+		pname = *(++argv);
+		argc--; 
+		goto b1;
+	    default: Usage();	break;
+	    }
+    b1: argc--; argv++;
+    }
+
+    if (argc != 0)
+	Usage();
+
     string reason;
     RclConfig *config = recollinit(0, 0, reason);
     if (config == 0 || !config->ok()) {
 	cerr << "Configuration problem: " << reason << endl;
 	exit(1);
     }
-    list<string> names = config->getConfNames("");
-    names.sort();
-    names.unique();
-    for (list<string>::iterator it = names.begin(); it != names.end();it++) {
+    if (op_flags & OPT_s)
+	config->setKeyDir(skey);
+    if (op_flags & OPT_q) {
 	string value;
-	config->getConfParam(*it, value);
-	cout << *it << " -> [" << value << "]" << endl;
-    }
+	if (!config->getConfParam(pname, value)) {
+	    fprintf(stderr, "getConfParam failed for [%s]\n", pname.c_str());
+	    exit(1);
+	}
+	printf("[%s] -> [%s]\n", pname.c_str(), value.c_str());
+    } else {
+	list<string> names = config->getConfNames("");
+	names.sort();
+	names.unique();
+	for (list<string>::iterator it = names.begin(); 
+	     it != names.end();it++) {
+	    string value;
+	    config->getConfParam(*it, value);
+	    cout << *it << " -> [" << value << "]" << endl;
+	}
+    }
+    exit(0);
 }
 
 #endif // TEST_RCLCONFIG