]> andersk Git - moira.git/commitdiff
Initial revision
authormar <mar>
Wed, 10 Mar 1993 10:27:54 +0000 (10:27 +0000)
committermar <mar>
Wed, 10 Mar 1993 10:27:54 +0000 (10:27 +0000)
regtape/vote.dc [new file with mode: 0644]

diff --git a/regtape/vote.dc b/regtape/vote.dc
new file mode 100644 (file)
index 0000000..37a97d6
--- /dev/null
@@ -0,0 +1,182 @@
+/* $Header$
+ */
+
+#include <stdio.h>
+#include <strings.h>
+#include <ctype.h>
+#include <sys/time.h>
+#include <moira.h>
+#include <moira_site.h>
+EXEC SQL INCLUDE sqlca;
+
+
+struct entry {
+    char *line;
+    char last[19];
+    char first[14];
+    char middle[11];
+    char class;
+    char login[9];
+};
+
+char *whoami;
+int debug;
+
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+    FILE *in;
+    struct entry *e, *get_next_entry();
+    int i, wait = 0;
+    char buf[BUFSIZ], *file = NULL, *p, *p1;
+
+    debug = 0;
+    whoami = rindex(argv[0], '/');
+    if (whoami)
+      whoami++;
+    else
+      whoami = argv[0];
+
+    for (i = 1; i < argc; i++) {
+       if (!strcmp(argv[i], "-w"))
+         wait++;
+       else if (!strcmp(argv[i], "-D"))
+         setenv("ING_SET", "set printqry");
+       else if (!strcmp(argv[i], "-d"))
+         debug = 1;
+       else if (file != NULL)
+         fprintf(stderr, "Usage: %s [-w] [-D] [-n] inputfile\n", whoami);
+       else
+         file = argv[i];
+    }
+
+    in = fopen(file, "r");
+    if (in == NULL) {
+       fprintf(stderr, "Unable to open %s for input\n", file);
+       exit(1);
+    }
+
+    setlinebuf(stdout);
+    setlinebuf(stderr);
+
+    EXEC SQL CONNECT moira;
+    if (sqlca.sqlcode != 0) {
+       com_err(whoami, 0, "ingres error %d", sqlca.sqlcode);
+       exit(1);
+    }
+
+    while (e = get_next_entry(in)) {
+       i = process_entry(e);
+       EXEC SQL COMMIT WORK;
+       if (i == 0) {
+           p = &(e->line[46]);
+           for (p1 = e->login; *p1; p1++)
+             *p++ = *p1;
+           for (; p < &(e->line[54]); p++)
+             *p = ' ';
+           fputs(e->line, stdout);
+       }
+       if (wait) {
+           printf("Next");
+           fflush(stdout);
+           gets(buf);
+       }
+    }
+
+    exit(0);
+}
+
+
+
+struct entry *get_next_entry(in)
+FILE *in;
+{
+    static struct entry e;
+    static char buf[BUFSIZ];
+
+    if (fgets(buf, sizeof(buf), in) == NULL)
+      return((struct entry *)NULL);
+
+    e.line = &buf[0];
+    strncpy(e.last, &buf[4], 18);
+    e.last[18] = 0;
+    strncpy(e.first, &buf[22], 13);
+    e.first[13] = 0;
+    strncpy(e.middle, &buf[35], 10);
+    e.middle[10] = 0;
+    e.class = buf[45];
+    return(&e);
+}
+
+
+process_entry(e)
+struct entry *e;
+{
+    int dummy;
+    static int nyear = 0;
+    EXEC SQL BEGIN DECLARE SECTION;
+    char *last, *first, *middle, *login, class[10];
+    EXEC SQL END DECLARE SECTION;
+
+    if (nyear == 0) {
+       struct tm *tm;
+       struct timeval tv;
+
+       gettimeofday(&tv, NULL);
+       tm = localtime(&tv.tv_sec);
+       nyear = tm->tm_year;
+       if (tm->tm_mon > 5)
+         nyear++;
+    }
+
+    LookForSt(e->last);
+    LookForO(e->last);
+    LookForJrAndIII(e->last, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy);
+    LookForJrAndIII(e->first, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy);
+    FixCase(e->last);
+    FixCase(e->first);
+    FixCase(e->middle);
+
+    last = e->last;
+    first = e->first;
+    middle = e->middle;
+    login = e->login;
+
+    if (debug)
+      printf("Got last: %s, first %s, middle %s, class %c\n",
+            last, first, middle, e->class);
+    EXEC SQL REPEATED SELECT login INTO :login FROM users
+      WHERE last = :last and first = :first and middle = :middle and
+       status != 3;
+    if (sqlca.sqlcode != 0) {
+       if (sqlca.sqlcode == 100) {
+           EXEC SQL REPEATED SELECT login INTO :login FROM users
+             WHERE last = :last and first = :first and status != 3;
+           if (sqlca.sqlcode != 0) {
+               fprintf(stderr, "User %s %s not found.\n", strtrim(e->first),
+                       strtrim(e->last));
+               return(-1);
+           }
+       } else if (sqlca.sqlcode == -40100) {
+           sprintf(class, "%d", nyear + 4 - e->class - '0' + 1900);
+           EXEC SQL REPEATED SELECT login INTO :login FROM users
+             WHERE last = :last and first = :first and middle = :middle
+               and type = :class and status != 3;
+           if (sqlca.sqlcode != 0) {
+               fprintf(stderr, "Could not match class on %s %s %c (Error %d)\n",
+                       strtrim(e->first), strtrim(e->last), e->class, sqlca.sqlcode);
+               return(-1);
+           }
+       } else {
+           fprintf(stderr, "Error %d on %s\n", sqlca.sqlcode, e->line);
+           return(-1);
+       }
+    }
+    strncpy(e->login, login, 8);
+    e->login[8] = 0;
+    if (debug)
+      printf("Got username %s\n", login);
+    return(0);
+}
This page took 0.089215 seconds and 5 git commands to generate.