]> andersk Git - moira.git/blame - regtape/vote.dc
add the ability to fix sigs
[moira.git] / regtape / vote.dc
CommitLineData
2f791b66 1/* $Header$
2 */
3
4#include <stdio.h>
5#include <strings.h>
6#include <ctype.h>
7#include <sys/time.h>
8#include <moira.h>
9#include <moira_site.h>
10EXEC SQL INCLUDE sqlca;
11
12
13struct entry {
14 char *line;
15 char last[19];
16 char first[14];
17 char middle[11];
18 char class;
19 char login[9];
20};
21
22char *whoami;
23int debug;
24
25
26main(argc, argv)
27int argc;
28char **argv;
29{
30 FILE *in;
31 struct entry *e, *get_next_entry();
32 int i, wait = 0;
33 char buf[BUFSIZ], *file = NULL, *p, *p1;
34
35 debug = 0;
36 whoami = rindex(argv[0], '/');
37 if (whoami)
38 whoami++;
39 else
40 whoami = argv[0];
41
42 for (i = 1; i < argc; i++) {
43 if (!strcmp(argv[i], "-w"))
44 wait++;
45 else if (!strcmp(argv[i], "-D"))
46 setenv("ING_SET", "set printqry");
47 else if (!strcmp(argv[i], "-d"))
48 debug = 1;
49 else if (file != NULL)
50 fprintf(stderr, "Usage: %s [-w] [-D] [-n] inputfile\n", whoami);
51 else
52 file = argv[i];
53 }
54
55 in = fopen(file, "r");
56 if (in == NULL) {
57 fprintf(stderr, "Unable to open %s for input\n", file);
58 exit(1);
59 }
60
61 setlinebuf(stdout);
62 setlinebuf(stderr);
63
64 EXEC SQL CONNECT moira;
65 if (sqlca.sqlcode != 0) {
66 com_err(whoami, 0, "ingres error %d", sqlca.sqlcode);
67 exit(1);
68 }
69
70 while (e = get_next_entry(in)) {
71 i = process_entry(e);
72 EXEC SQL COMMIT WORK;
73 if (i == 0) {
74 p = &(e->line[46]);
75 for (p1 = e->login; *p1; p1++)
76 *p++ = *p1;
77 for (; p < &(e->line[54]); p++)
78 *p = ' ';
79 fputs(e->line, stdout);
80 }
81 if (wait) {
82 printf("Next");
83 fflush(stdout);
84 gets(buf);
85 }
86 }
87
88 exit(0);
89}
90
91
92
93struct entry *get_next_entry(in)
94FILE *in;
95{
96 static struct entry e;
97 static char buf[BUFSIZ];
98
99 if (fgets(buf, sizeof(buf), in) == NULL)
100 return((struct entry *)NULL);
101
102 e.line = &buf[0];
103 strncpy(e.last, &buf[4], 18);
104 e.last[18] = 0;
105 strncpy(e.first, &buf[22], 13);
106 e.first[13] = 0;
107 strncpy(e.middle, &buf[35], 10);
108 e.middle[10] = 0;
109 e.class = buf[45];
110 return(&e);
111}
112
113
114process_entry(e)
115struct entry *e;
116{
117 int dummy;
118 static int nyear = 0;
119 EXEC SQL BEGIN DECLARE SECTION;
120 char *last, *first, *middle, *login, class[10];
121 EXEC SQL END DECLARE SECTION;
122
123 if (nyear == 0) {
124 struct tm *tm;
125 struct timeval tv;
126
127 gettimeofday(&tv, NULL);
128 tm = localtime(&tv.tv_sec);
129 nyear = tm->tm_year;
130 if (tm->tm_mon > 5)
131 nyear++;
132 }
133
134 LookForSt(e->last);
135 LookForO(e->last);
136 LookForJrAndIII(e->last, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy);
137 LookForJrAndIII(e->first, &dummy, &dummy, &dummy, &dummy, &dummy, &dummy);
138 FixCase(e->last);
139 FixCase(e->first);
140 FixCase(e->middle);
141
142 last = e->last;
143 first = e->first;
144 middle = e->middle;
145 login = e->login;
146
147 if (debug)
148 printf("Got last: %s, first %s, middle %s, class %c\n",
149 last, first, middle, e->class);
150 EXEC SQL REPEATED SELECT login INTO :login FROM users
151 WHERE last = :last and first = :first and middle = :middle and
152 status != 3;
153 if (sqlca.sqlcode != 0) {
154 if (sqlca.sqlcode == 100) {
155 EXEC SQL REPEATED SELECT login INTO :login FROM users
156 WHERE last = :last and first = :first and status != 3;
157 if (sqlca.sqlcode != 0) {
158 fprintf(stderr, "User %s %s not found.\n", strtrim(e->first),
159 strtrim(e->last));
160 return(-1);
161 }
162 } else if (sqlca.sqlcode == -40100) {
163 sprintf(class, "%d", nyear + 4 - e->class - '0' + 1900);
164 EXEC SQL REPEATED SELECT login INTO :login FROM users
165 WHERE last = :last and first = :first and middle = :middle
166 and type = :class and status != 3;
167 if (sqlca.sqlcode != 0) {
168 fprintf(stderr, "Could not match class on %s %s %c (Error %d)\n",
169 strtrim(e->first), strtrim(e->last), e->class, sqlca.sqlcode);
170 return(-1);
171 }
172 } else {
173 fprintf(stderr, "Error %d on %s\n", sqlca.sqlcode, e->line);
174 return(-1);
175 }
176 }
177 strncpy(e->login, login, 8);
178 e->login[8] = 0;
179 if (debug)
180 printf("Got username %s\n", login);
181 return(0);
182}
This page took 0.067007 seconds and 5 git commands to generate.