V10/cmd/library/option3.c
/* library:option3.c 1.10 */
#include "sccsid.h"
VERSION(@(#)library:option3.c 1.10)
/****************** option3.c *****************************/
/* This routine accepts bulletin subscriptions.
*
*/
#include <stdio.h>
#include <ctype.h>
#include <signal.h>
option3(logfile, argc, argv)
FILE *logfile;
int argc;
char *argv[];
{
int firsttime = 1; /* initialize to indicate first time through */
int i, numreq=0;
long day;
char *dateptr, *ctime(), *ptr;
char instr[512], response[5000], *strchr();
FILE *helpfile, *sendfile, *popen();
extern char *Cmd, *whereto, libcntl[], pan[], req_name[];
/* get the date - note used only in the log */
time(&day);
dateptr = ctime(&day);
while (1) { /* continue until user is done */
if (!argc) {
if (firsttime) {
printf("Enter your subscriptions in the form:\n (un)subscribe to <bulletin name>\n");
firsttime = 0;
}
/* get the subscription */
printf("Enter subscription");
printf(" (exit with a period):");
if (fgets(instr, 512, stdin) == NULL) break;
if (*instr == '.') break;
if ((ptr = strchr(instr, '\n')) != NULL) *ptr = '\0';
}
/* special handling in the case of parameters passed */
else {
*instr = '\0';
for (i=0; i<argc; i++) {
if (*instr) strcat(instr, " ");
strcat(instr, argv[i]);
}
}
uppercase(instr);
/* check for help request */
if ((*instr == '?') || (*instr == 'H')) {
sprintf(instr, "%s/option3.help", WHERE);
if ((helpfile = fopen(instr, "r")) == NULL) {
printf("Sorry. Help statement unavailable!\n");
continue;
}
while (fgets(instr, 250, helpfile) != NULL)
fputs(instr, stdout);
fclose(helpfile);
if (argc) break;
continue;
}
if (strlen(instr) > 0) {
if ((strncmp(instr, "UNSUB", 5) != 0) && (strncmp(instr, "SUB", 3) != 0) ) {
printf("Illegal entry - a subscription or unsubscription is required.\n");
firsttime=1;
if (argc) break;
continue;
}
strcat(response, instr);
strcat(response, "\n");
numreq++;
}
if (argc) break;
} /* end of subscription getting loop */
if (!numreq) {
printf("No subscription entered!\n");
return;
}
/* output the record */
signal(SIGINT, SIG_IGN);
#ifdef MSDOS
if ((sendfile = fopen("\\pipe.tmp", "w")) == NULL) {
#else
sprintf(instr, "%s %s", Cmd, whereto);
if ((sendfile = popen(instr, "w")) == NULL) {
#endif
fprintf(stderr, "Couldn't open mail pipe to send requests! No requests sent\n");
exit(1);
}
fprintf(sendfile, "* *#SUB-%s\n%s\n%s\n**-**\n", libcntl, pan, req_name);
fputs(response, sendfile);
#ifdef MSDOS
fclose(sendfile);
sprintf(instr, "%s -f \\pipe.tmp -slibRequest %s", Cmd, whereto);
system(instr);
unlink("\\pipe.tmp");
#else
pclose(sendfile);
#endif
if (logfile != NULL) {
fprintf(logfile, "From %s %sSubject: Subscription request\n",
req_name, dateptr);
fputs(response, logfile);
fputc('\n', logfile);
fclose(logfile);
}
fprintf(stdout, "Your %d subscription requests have been sent\n", numreq);
return;
}