home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-387-Vol-3of3.iso
/
b
/
bmh02src.zip
/
MAILER.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-08-17
|
4KB
|
175 lines
/*
mailer.c : Copyright Paul Healy, EI9GL, 1992.
920802 : Created.
*/
#include <stdio.h>
#include <stdlib.h>
#include <dir.h>
#include <process.h>
#include <ctype.h>
#include "rc.h"
#include "send.h"
#include "misc.h"
#include "header.h"
#include "mailer.h"
#include "pager.h"
#include "nntp.h"
/*
* eg, set TMP=g:\ where g: is a ram disk
*/
FILE *
tempfile(char *prog, char *filename, char *mode)
{
char *tmp = getrc(tmpdir);
FILE *fp = NULL;
if (tmp == NULL)
if ( (tmp = getenv("BMHTMP")) == NULL)
tmp = getenv("TMP");
if (tmp == NULL)
sprintf(filename, "%.6sXXXXXX", prog);
else
sprintf(filename, "%s%.6sXXXXXX", tmp, prog);
if ((mktemp(filename) == NULL) || ( (fp = fopen(filename, mode)) == NULL) )
fprintf(stderr, "%s: can't make temporary file %s\n", prog, filename);
#ifdef DEBUG
printf("tempfile: made %s\n", filename);
#endif
return fp;
}
int
call_ed(char *prog, char *filename)
{
char *ed = getrc(editor);
if ( ed == NULL) {
fprintf(stderr, "%s: no editor defined\n", prog);
return -1;
}
if (spawnlp(P_WAIT, ed, ed, filename, NULL) != 0) {
fprintf(stderr, "%s: error calling editor '%s %s'\n", prog, ed, filename);
perror(prog);
return -1;
}
return 0;
}
static int
what_now(char *filename)
{
char s[4];
while (1) {
printf("What now? ");
if (fgets(s, sizeof(s), stdin) == NULL)
return -1;
switch (tolower(*s)) {
case 'e':
call_ed("whatnow", filename);
break;
case 'l':
page_file(filename);
putchar('\r');
break;
case 'p':
case 's':
case '.': /* bm/mail ness */
return 0;
case 'q':
return -1;
case '?':
printf(" edit message\n");
printf(" list message\n");
printf(" post message\n");
printf(" quit\n");
printf(" ? - print this message\n");
break;
default:
printf("Type ? for help\n");
break;
}
}
}
int
dowhatnow(char *prog, char *filename, int callagent)
{
if (what_now(filename) == 0) {
char *arg[MAXHDR];
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
fprintf(stderr, "%s: error opening %s\n", prog, filename);
return -1;
}
if (looseparseheaderfile(fp, arg) == -1) {
fclose(fp);
return -1;
}
switch (callagent) {
case AG_BOUNCE:
bouncemsg(fp, arg[TO]);
break;
case AG_SMTP:
dosmtpsend(fp, arg[TO], arg[CC], arg[SUBJECT]);
break;
case AG_NNTP:
post(fp, arg[NEWSGROUP], arg[SUBJECT]);
break;
default:
break;
}
freeheader(arg);
fclose(fp);
} /* if */
return unlink(filename);
}
void
dosignature(FILE *fp)
{
FILE *sigfp;
int ch;
if (getrc(signature) == NULL)
return ;
if ( (sigfp = fopen(getrc(signature), "r")) == NULL) {
fprintf(stderr, "bmh: can't open signature file %s\n", getrc(signature));
return ;
}
while ((ch = fgetc(sigfp)) != EOF)
if (fputc(ch, fp) == EOF) {
fprintf(stderr, "bmh: error adding signature file to message\n");
break;
}
fclose(sigfp);
}
int
dupfile(FILE *in, FILE *out)
{
char buf[2048];
int r;
while ( (r = fread(buf, sizeof(char), sizeof(buf), in)) > 0 ) {
if ( fwrite(buf, sizeof(char), r, out) != r) {
fprintf(stderr, "bmh: error writing file\n");
return -1;
}
if (r != sizeof(buf))
return 0;
}
return 0;
}