From: mar Date: Wed, 10 Mar 1993 10:27:54 +0000 (+0000) Subject: Initial revision X-Git-Tag: release77~206 X-Git-Url: http://andersk.mit.edu/gitweb/moira.git/commitdiff_plain/2f791b662e121ddb268a11b974a2df487aec4b6f Initial revision --- diff --git a/regtape/vote.dc b/regtape/vote.dc new file mode 100644 index 00000000..37a97d67 --- /dev/null +++ b/regtape/vote.dc @@ -0,0 +1,182 @@ +/* $Header$ + */ + +#include +#include +#include +#include +#include +#include +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); +}