]> andersk Git - moira.git/blobdiff - db/conv.qc
Initial revision
[moira.git] / db / conv.qc
diff --git a/db/conv.qc b/db/conv.qc
new file mode 100644 (file)
index 0000000..f64127a
--- /dev/null
@@ -0,0 +1,203 @@
+/* $Header$ */
+
+/*  (c) Copyright 1988 by the Massachusetts Institute of Technology. */
+/*  For copying and distribution information, please see the file */
+/*  <mit-copyright.h>. */
+
+
+#include <mit-copyright.h>
+#include <stdio.h>
+#include <sys/file.h>
+#include <ctype.h>
+
+char prefix[256];
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+##  char *db;
+
+    if (argc == 2)
+      db = argv[1];
+    else
+      db = "sms";
+
+    printf("Prefix of backup to restore: ");
+    fflush(stdout);
+    if (gets(prefix) == NULL) {
+       return 1;
+    }
+
+    printf("Opening database...");
+    fflush(stdout);
+##  ingres db
+    printf("done\n");
+
+    do_users();
+    do_finger();
+    do_mach();
+    do_clu();
+    do_mcm();
+    do_cld();
+    do_servers();
+    do_serverhosts();
+    do_list();
+    do_maillists();
+    do_groups();
+    do_members();
+    do_strings();
+    do_pobox();
+    do_nfsphys();
+    do_filesys();
+    do_nfsquota();
+    do_services();
+    do_printcap();
+    do_alias();
+    do_values();
+
+    printf("All done.\n");
+##  exit
+}
+
+char field_chars[] = {
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,  /* ^@ - ^O */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* ^P - ^_ */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* SP - /  */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,  /* 0  - ?  */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* @  - O  */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* P  - _  */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* `  - o  */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* p  - ^? */
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
+};
+
+
+int parse_int(f)
+    register FILE *f;
+{
+    register int c;
+    register int val = 0;
+    register int sign = 1;
+    while ((c = getc(f)) != EOF && field_chars[c] == 0) {
+       if (c == '-') sign = -1;
+       else if (isdigit(c)) {
+           val *= 10;
+           val += (c - '0');
+       } else (void) fprintf(stderr,"non-digit in numeric field\n");
+    }
+    (void) ungetc(c, f);
+    return(val * sign);
+}
+
+void parse_str(f, buf, len)
+    register FILE *f;
+    register char *buf;
+    register int len;          /* incl trailing NULL */
+{
+    register int c;
+
+    while ((c = getc(f)) != EOF && field_chars[c] == 0 && len > 0) {
+       if (c == '\\') {
+           c = getc(f);
+           if (isdigit(c)) {
+               /* Expect three-digit octal number.. */
+               register int c1, c2;
+               c1 = getc(f);
+               c2 = getc(f);
+               if (!isdigit(c1) || !isdigit(c2)) 
+                   punt("Broken \\###");
+               /* Convert to ASCII code: */
+               *buf++ =  (((c-'0')<<6) + ((c1-'0')<<3) + c2-'0');
+           } else if (c == '\\' || c == ':') {
+               *buf++ = c;
+               --len;
+           } else punt ("Broken '\\'");
+       } else {
+           *buf++ = c;
+           --len;
+       }
+    }
+    if (c == EOF)
+       return;
+    
+    if (c != EOF && c != ':' && c != '\n') {
+       fprintf(stderr, "Field too wide, truncated\n");
+       while ((c = getc(f)) != EOF && c != ':' && c != '\n');
+       (void) ungetc(c, f);
+    } else {
+       *buf++ = 0;
+       (void) ungetc(c, f);
+    }
+}
+    
+void parse_sep(f)
+    FILE *f;
+{
+    if (getc(f) != ':') punt("Expected colon");
+}
+void parse_nl(f)
+    FILE *f;
+{
+    if (getc(f) != '\n') punt("Expected newline");
+}
+
+
+FILE *open_file(suffix)
+    char *suffix;
+{
+    char name[BUFSIZ];
+    int fd;
+    FILE *f;
+    
+    sprintf(name, "%s/%s", prefix, suffix);
+
+    fd = open(name, O_RDONLY, 0);
+    if (fd < 0) {
+       punt(name);
+    }
+    f = fdopen(fd, "r");
+    if (f == NULL) {
+       fprintf(stderr, "fdopen of ");
+       punt(name);
+    }
+    fprintf(stderr, "Working on %s\n", name);
+    return(f);
+}
+
+punt(s)
+char *s;
+{
+    printf("exiting: %s\n", s);
+    exit(1);
+}
+
+static int count;
+static int interval;
+
+start_counter(x)
+int x;
+{
+    count = 0;
+    interval = x;
+}
+
+inc_count()
+{
+    if (count++ % interval == 0) {
+       printf("\r%d...", count - 1);
+       fflush(stdout);
+    }
+}
+
+end_counter()
+{
+    printf("\r%d items processed.\n", count);
+}
This page took 0.04499 seconds and 4 git commands to generate.