Initial version of email gateway under CVS control.
[egate.git] / res+log / gw-res-test.c
1 /*
2    gw-res-test.c: Test of resource management.
3
4    Europagate, 1994-1995.
5
6    $Log: gw-res-test.c,v $
7    Revision 1.1.1.1  1995/02/09 17:27:12  adam
8    Initial version of email gateway under CVS control.
9
10
11    Initial:       Dec  7, 94 (Adam Dickmeiss)
12    Last update:   Dec 13, 94 (Adam Dickmeiss)
13
14  */
15
16 #include <stdio.h>
17 #include <stdlib.h>
18 #include <string.h>
19 #include <stdarg.h>
20
21 #include <gw-log.h>
22 #include <gw-res.h>
23
24 static GwRes res;
25
26 static void showf (const char *name, const char *value)
27 {
28     printf ("%s: %s\n", name, value);
29 }
30
31 static void interactive (void)
32 {
33     char buffer[128];
34     char arg[3][128];
35     int no_arg;
36     int r;
37
38     while (1)
39     {
40         char *cp;
41         const char *value;
42
43         putc ('>', stdout);
44         fflush (stdout);
45         if (!(fgets (buffer, sizeof(buffer)-1, stdin)))
46             break;
47         while ((cp = strchr (buffer, '\n')))
48             *cp = '\0';
49         if (*buffer == '\0')
50             continue;
51         no_arg = sscanf (buffer+1, "%s %s %s", arg[0], arg[1], arg[2]);
52         r = -10;
53         switch (*buffer)
54         {
55         case 'm':
56             if (no_arg == 1)
57                 r = gw_res_merge (res, arg[0]);
58             break;
59         case 'p':
60             if (no_arg == 3)
61                 r = gw_res_put (res, arg[0], arg[1], arg[2]);
62             break;
63         case 'g':
64             if (no_arg == 1)
65             {
66                 value = gw_res_get (res, arg[0], "<unknown>");
67                 printf ("%s has value `%s'\n", arg[0], value);
68                 r = 0;
69             }
70             break;
71         case 's':
72             if (no_arg == 1)
73                 r = gw_res_trav (res, arg[0], showf);
74             else if (no_arg <= 0)
75                 r = gw_res_trav (res, NULL, showf);
76             break;
77         case 'c':
78             if (no_arg == 1)
79                 r = gw_res_commit (res, arg[0]);
80             break;
81         case 'h':
82             printf ("m <file>                     merge\n"
83                     "g <name>                     get\n"
84                     "p <name> <value> <file>      put\n"
85                     "s [<file>]                   show\n"
86                     "c <file>                     commit\n"
87                     "q                            quit\n");
88             r = 0;
89             break;
90         case 'q':
91             return;
92         }
93         if (r == -10)
94             printf ("syntax, type 'h' for help\n");
95         else if (r)
96             printf ("returned %d\n", r);
97         else
98             printf ("ok\n");
99     }
100 }
101
102 static void do_intensive (void)
103 {
104     int i;
105     for (i = 0; i<100; i++)
106     {
107         const char *cp;
108         char new_val[12];
109         res = gw_res_init ();
110         
111         gw_res_merge (res, "big.res");
112         gw_res_merge (res, "default.res");
113         gw_res_merge (res, "adam.res");
114
115         cp = gw_res_get (res, "loopvar", "0");
116         sprintf (new_val, "%d", atoi(cp)+1);
117         gw_res_put (res, "loopvar", new_val, "big.res");
118
119         gw_res_commit (res, "big.res");
120         gw_res_close (res);
121     }
122 }
123
124 int main (int argc, char **argv)
125 {
126     gw_log_init (*argv);
127
128     while (--argc > 0)
129     {
130         if (**++argv == '-')
131         {
132             switch (*++*argv)
133             {
134             case 'd':
135                 gw_log_level (GW_LOG_ALL);
136                 continue;
137             case 't':
138                 do_intensive ();
139                 return 0;
140             default:
141                 gw_log (GW_LOG_FATAL, "Fatal", "Unknown option %s",
142                         *argv);
143                 exit (1);
144             }
145         }
146     }
147     gw_log_file (GW_LOG_ALL, "all.log");
148
149     res = gw_res_init ();
150
151     interactive ();
152
153     gw_res_close (res);
154     exit (0);
155 }