/* $Header: /afs/sipb.mit.edu/project/sipb-athena/repository/src/moira/regtape/vote.dc,v 1.2 1996/06/02 07:44:11 ghudson Exp $
 */

#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 id[19];
    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[0]);
	    for (p1 = e->login; *p1; p1++)
	      *p++ = *p1;
	    for (; p < &(e->line[10]); 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.id, &buf[0], 9);
    e.id[9] = 0;
    e.login[0] = 0;
    return(&e);
}


process_entry(e)
struct entry *e;
{
    EXEC SQL BEGIN DECLARE SECTION;
    char *id, *login;
    EXEC SQL END DECLARE SECTION;

    id = e->id;
    login = e->login;
    EXEC SQL REPEATED SELECT login INTO :login FROM users
      WHERE clearid = :id;
    if (sqlca.sqlcode != 0) {
	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);
}
