/* $Header$ */ #include #include #include #include #include #include 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); }