|
|
researchv10 Norman
#include <stdio.h>
#include <signal.h>
#include <time.h>
inter()
{
printf("interrupted - no orders sent\n");
exit(0);
}
struct Data {
char *prompt;
char store[512];
} data[] = {
{ "Book title", "" },
{ "Author(s)", "" },
{ "Publisher", "" },
{ "Publication Date", "" },
{ "ISBN", "" },
{ "Other info (e.g. volume,edition,paperback)", "" },
{ "Estimated price", "" },
{ "Number of copies", "" },
{ 0, 0 }
};
main(argc, argv)
char *argv[];
{
int i, cnt=0; char More[8];
FILE *fd, *fdtmp;
char Tmp[L_tmpnam], User[64], Log1[512], Log2[512], Sharon[512];
long clock = time(0L);
struct tm *tm = localtime(&clock);
signal(SIGINT, inter);
printf("1127 - Fast(er) Book Ordering System\n");
printf("====================================\n");
fflush(stdout);
if ((fd = fopen("/lib/book_orders", "a")) == NULL)
{ printf("error: cannot open /lib/book_orders\n");
exit(1);
}
tmpnam(Tmp);
if ((fdtmp = fopen(Tmp, "w")) == NULL)
{ printf("error: cannot create temporary file\n");
exit(1);
}
getlogname(User);
sprintf(Log1, "Book Order by %s, %s", User, asctime(tm));
again: cnt++;
for (i = 0; data[i].prompt; i++)
{ printf("%s: ", data[i].prompt);
fflush(stdout);
fgets(data[i].store, 510, stdin);
}
fprintf(fdtmp, "\n%s", Log1);
fprintf(fdtmp, "================================================\n");
fprintf(fd, "%s", data[0].store); fflush(fd);
for (i = 0; data[i].prompt; i++)
{ fprintf(fdtmp, "%s: %s", data[i].prompt, data[i].store);
memset(data[i].store, 0, 512);
}
fprintf(fdtmp, " ==forwarded to [email protected]== \n");
fflush(fdtmp);
printf("More (y/n)? ");
fflush(stdout);
fgets(More, 6, stdin);
if (strcmp(More, "y\n") == 0)
goto again;
sprintf(Log2, "%d x %s", cnt, Log1);
fprintf(fd, "%s", Log2); fflush(fd);
fclose(fd);
sprintf(Sharon, "/bin/mail %s sharon [email protected] < %s; rm -f %s",
User, Tmp, Tmp);
if (system(Sharon) == 127)
{ printf("error on logfile - mail sharon\n");
exit(1);
}
printf("\n%d order%s sent\n", cnt, (cnt>1)?"s":"");
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.