src/dbtool.c
changeset 0 586472add385
child 27 4a2f7a1492ab
new file mode 100644
--- /dev/null
+++ b/src/dbtool.c
@@ -0,0 +1,137 @@
+/**
+ *  $Id: dbtool.c 51 2008-01-10 00:19:39Z mbroeker $
+ * $URL: http://localhost/svn/c/mcbot/trunk/src/dbtool.c $
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <getopt.h>
+
+#include <database.h>
+
+#ifndef FILE_NAME
+#define FILE_NAME "/var/lib/nobody/data/mcbot.dat"
+#endif
+
+void help (char *prgname)
+{
+    printf ("Usage: %s [[-a|-r] -k <key> -v <value>]\n", prgname);
+    printf ("       %s [-d <key>]\n", prgname);
+    printf ("       %s [-f <file>]\n", prgname);
+    printf ("       %s [-s <key>]\n", prgname);
+    printf ("       %s [-h|-?]\n\n", prgname);
+    printf ("Administration tool for adding/replacing, deleting, ... of DataBase Entries.\n\n");
+    printf ("Options:\n");
+    printf ("  -a\t\tadds a new key <key> with value <value> to the db\n");
+    printf ("  -r\t\treplaces a key <key> with value <value> in the db\n");
+    printf ("  -d\t\tdeletes a <key> from the db\n");
+    printf ("  -f\t\tsets the db file\n");
+    printf ("  -l\t\tlists the db entries\n");
+    printf ("  -s\t\tsearches the db entry <key>\n");
+    printf ("  -V\t\treorganizes the db\n");
+    printf ("  -h\t\tprints this help\n");
+    printf ("  -?\t\tprints this help\n\n");
+    printf ("Report bugs to mbroeker@largo.homelinux.org\n");
+    exit (0);
+}
+
+#define     ADD 1
+#define REPLACE 2
+#define  DELETE 3
+#define  SEARCH 4
+#define    LIST 5
+#define VACCUUM 6
+
+int main (int argc, char **argv)
+{
+    int i;
+    int mode = 0;
+    char *key = NULL;
+    char *value = NULL;
+    char *file_name = NULL;
+
+    while ((i = getopt (argc, argv, "arlVh?d:f:k:s:v:")) > 0) {
+        switch (i) {
+        case '?':
+        case 'h':
+            help (argv[0]);
+            break;
+        case 'a':
+            mode = ADD;
+            break;
+        case 'r':
+            mode = REPLACE;
+            break;
+        case 'd':
+            mode = DELETE;
+            key = optarg;
+            break;
+        case 'f':
+            file_name = optarg;
+            break;
+        case 'k':
+            key = optarg;
+            break;
+        case 's':
+            key = optarg;
+            mode = SEARCH;
+            break;
+        case 'v':
+            value = optarg;
+            break;
+        case 'l':
+            mode = LIST;
+            break;
+        case 'V':
+            mode = VACCUUM;
+            break;
+        default:
+            printf ("Unknown Option %c\n", i);
+        }
+    }
+
+    for (i = optind; i < argc; i++) {
+        printf ("Unknown Parameter: %s\n", argv[i]);
+    }
+
+    if (!file_name)
+        file_name = FILE_NAME;
+
+    switch (mode) {
+    case ADD:
+        if ((key != NULL) && (value != NULL))
+            printf ("%s\n", db_insert (file_name, key, value, 0));
+        else
+            help (argv[0]);
+        break;
+    case REPLACE:
+        if ((key != NULL) && (value != NULL))
+            printf ("%s\n", db_insert (file_name, key, value, 1));
+        else
+            help (argv[0]);
+        break;
+    case DELETE:
+        if (key != NULL)
+            printf ("%s\n", db_remove (file_name, key));
+        else
+            help (argv[0]);
+        break;
+    case SEARCH:
+        if (key != NULL)
+            printf ("%s\n", db_lookup (file_name, key));
+        else
+            help (argv[0]);
+        break;
+    case LIST:
+        printf ("%s\n", db_list (file_name));
+        break;
+    case VACCUUM:
+        printf ("%s\n", db_vaccuum (file_name));
+        break;
+    default:
+        printf ("Nothing to do: Try %s -h\n", argv[0]);
+    }
+
+    return EXIT_SUCCESS;
+}