Initial revision
[egate.git] / res+log / gw-res-test.c
diff --git a/res+log/gw-res-test.c b/res+log/gw-res-test.c
new file mode 100644 (file)
index 0000000..ae64b06
--- /dev/null
@@ -0,0 +1,155 @@
+/*
+   gw-res-test.c: Test of resource management.
+
+   Europagate, 1994-1995.
+
+   $Log: gw-res-test.c,v $
+   Revision 1.1  1995/02/09 17:27:11  adam
+   Initial revision
+
+
+   Initial:       Dec  7, 94 (Adam Dickmeiss)
+   Last update:   Dec 13, 94 (Adam Dickmeiss)
+
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdarg.h>
+
+#include <gw-log.h>
+#include <gw-res.h>
+
+static GwRes res;
+
+static void showf (const char *name, const char *value)
+{
+    printf ("%s: %s\n", name, value);
+}
+
+static void interactive (void)
+{
+    char buffer[128];
+    char arg[3][128];
+    int no_arg;
+    int r;
+
+    while (1)
+    {
+        char *cp;
+        const char *value;
+
+        putc ('>', stdout);
+        fflush (stdout);
+        if (!(fgets (buffer, sizeof(buffer)-1, stdin)))
+            break;
+        while ((cp = strchr (buffer, '\n')))
+            *cp = '\0';
+        if (*buffer == '\0')
+            continue;
+        no_arg = sscanf (buffer+1, "%s %s %s", arg[0], arg[1], arg[2]);
+        r = -10;
+        switch (*buffer)
+        {
+        case 'm':
+            if (no_arg == 1)
+                r = gw_res_merge (res, arg[0]);
+            break;
+        case 'p':
+            if (no_arg == 3)
+                r = gw_res_put (res, arg[0], arg[1], arg[2]);
+            break;
+        case 'g':
+            if (no_arg == 1)
+            {
+                value = gw_res_get (res, arg[0], "<unknown>");
+                printf ("%s has value `%s'\n", arg[0], value);
+                r = 0;
+            }
+            break;
+        case 's':
+            if (no_arg == 1)
+                r = gw_res_trav (res, arg[0], showf);
+            else if (no_arg <= 0)
+                r = gw_res_trav (res, NULL, showf);
+            break;
+        case 'c':
+            if (no_arg == 1)
+                r = gw_res_commit (res, arg[0]);
+            break;
+        case 'h':
+            printf ("m <file>                     merge\n"
+                    "g <name>                     get\n"
+                    "p <name> <value> <file>      put\n"
+                    "s [<file>]                   show\n"
+                    "c <file>                     commit\n"
+                    "q                            quit\n");
+            r = 0;
+            break;
+        case 'q':
+            return;
+        }
+        if (r == -10)
+            printf ("syntax, type 'h' for help\n");
+        else if (r)
+            printf ("returned %d\n", r);
+        else
+            printf ("ok\n");
+    }
+}
+
+static void do_intensive (void)
+{
+    int i;
+    for (i = 0; i<100; i++)
+    {
+        const char *cp;
+        char new_val[12];
+        res = gw_res_init ();
+        
+        gw_res_merge (res, "big.res");
+        gw_res_merge (res, "default.res");
+        gw_res_merge (res, "adam.res");
+
+        cp = gw_res_get (res, "loopvar", "0");
+        sprintf (new_val, "%d", atoi(cp)+1);
+        gw_res_put (res, "loopvar", new_val, "big.res");
+
+        gw_res_commit (res, "big.res");
+        gw_res_close (res);
+    }
+}
+
+int main (int argc, char **argv)
+{
+    gw_log_init (*argv);
+
+    while (--argc > 0)
+    {
+        if (**++argv == '-')
+        {
+            switch (*++*argv)
+            {
+            case 'd':
+                gw_log_level (GW_LOG_ALL);
+                continue;
+            case 't':
+                do_intensive ();
+                return 0;
+            default:
+                gw_log (GW_LOG_FATAL, "Fatal", "Unknown option %s",
+                        *argv);
+                exit (1);
+            }
+        }
+    }
+    gw_log_file (GW_LOG_ALL, "all.log");
+
+    res = gw_res_init ();
+
+    interactive ();
+
+    gw_res_close (res);
+    exit (0);
+}