⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spost.c

📁 <B>Digital的Unix操作系统VAX 4.2源码</B>
💻 C
📖 第 1 页 / 共 2 页
字号:
    *argp++ = "-t";	/* read msg for recipients */    *argp++ = "-i";	/* don't stop on "." */    if (whomflg)	*argp++ = "-bv";    if (watch || verbose)	*argp++ = "-v";    *argp = NULL;    if (pushflg && !(watch || verbose)) {	/* fork to a child to run sendmail */	for (i=0; (pid = vfork()) == NOTOK && i < 5; i++)	    sleep(5);	switch (pid) {	    case NOTOK:		fprintf (verbose ? stdout : stderr, "%s: can't fork to %s\n",			 invo_name, sendmail);		exit(-1);	    case OK:		/* we're the child .. */		break;	    default:		exit(0);	}    }    execv ( sendmail, sargv);    adios ( sendmail, "can't exec");}/*    DRAFT GENERATION */static putfmt (name, str, out)char   *name,       *str;FILE * out;{    int     count,            grp,            i,            keep;    char   *cp,           *pp,           *qp,            namep[BUFSIZ];    struct mailname *mp,                   *np;    struct headers *hdr;    while (*str == ' ' || *str == '\t')	str++;    if ((i = get_header (name, hdrtab)) == NOTOK) {	fprintf (out, "%s: %s", name, str);	return;    }    hdr = &hdrtab[i];    if (hdr -> flags & HIGN)	return;    if (hdr -> flags & HBAD) {	advise (NULLCP, "illegal header line -- %s:", name);	badmsg++;	return;    }    msgflags |= hdr -> set;    if (hdr -> flags & HSUB)	subject = subject ? add (str, add ("\t", subject)) : getcpy (str);    if (hdr -> flags & HFCC) {	if (cp = rindex (str, '\n'))	    *cp = NULL;	for (cp = pp = str; cp = index (pp, ','); pp = cp) {	    *cp++ = NULL;	    insert_fcc (hdr, pp);	}	insert_fcc (hdr, pp);	return;    }#ifdef notdef    if (hdr -> flags & HBCC) {	insert_bcc(str);	return;    }#endif notdef    if (*str != '\n' && *str != '\0')	if (aliasflg && hdr->flags & HTRY) {	    /* this header contains address(es) that we have to do	     * alias expansion on.  Because of the saved state in	     * getname we have to put all the addresses into a list.	     * We then let putadr munch on that list, possibly	     * expanding aliases.	     */	    register struct mailname *f = 0;	    register struct mailname *mp = 0;	    while (cp = getname( str ) ) {		mp = getm( cp, NULLCP, 0, AD_HOST, NULLCP);		if (f == 0) {		    f = mp;		    mp->m_next = mp;		} else {		    mp->m_next = f->m_next;		    f->m_next = mp;		    f = mp;		}	    }	    f = mp->m_next; mp->m_next = 0;	    putadr( name, f );	} else {	    fprintf (out, "%s: %s", name, str );	}}/*  */staticstart_headers (){    char   *cp;    char    sigbuf[BUFSIZ];    (void)strcpy( from, getusr() );    if ((cp = getfullname ()) && *cp) {	(void)strcpy (sigbuf, cp);	(void)sprintf (signature, "%s <%s>", sigbuf,  from);    }    else	(void)sprintf (signature, "%s",  from);}/*  */staticfinish_headers (out)    FILE * out;{    switch (msgstate) {	case normal: 	    if (!(msgflags & MDAT))		fprintf (out, "Date: %s\n", dtimenow ());	    if (msgflags & MFRM)		fprintf (out, "Sender: %s\n", from);	    else		fprintf (out, "From: %s\n", signature);#ifdef notdef	    if (!(msgflags & MVIS))		fprintf (out, "Bcc: Blind Distribution List: ;\n");#endif notdef	    break;	case resent: 	    if (!(msgflags & MRDT))		fprintf (out, "Resent-Date: %s\n", dtimenow());	    if (msgflags & MRFM)		fprintf (out, "Resent-Sender: %s\n", from);	    else		fprintf (out, "Resent-From: %s\n", signature);#ifdef notdef	    if (!(msgflags & MVIS))		fprintf (out, "Resent-Bcc: Blind Re-Distribution List: ;\n");#endif notdef	    break;    }    if (badmsg)	adios (NULLCP, "re-format message and try again");}/*  */static intget_header (header, table)    char   *header;    struct headers *table;{    struct headers *h;    for (h = table; h -> value; h++)	if (uleq (header, h -> value))	    return (h - table);    return NOTOK;}/*  *//* output the address list for header "name".  The address list * is a linked list of mailname structs.  "nl" points to the head * of the list.  Alias substitution should be done on nl. */static putadr (name, nl)char *name;struct mailname *nl;{    register struct mailname *mp, *mp2;    register int linepos;    register char *cp;    int namelen;    fprintf (out, "%s: ", name);    namelen = strlen(name) + 2;    linepos = namelen;    for (mp = nl; mp; ) {	if (linepos > MAX_SM_FIELD) {		fprintf (out, "\n%s: ", name);		linepos = namelen;	}	if (mp->m_nohost) {	    /* a local name - see if it's an alias */	    cp = akvalue(mp->m_mbox);	    if (cp == mp->m_mbox)		/* wasn't an alias - use what the user typed */		linepos = putone( mp->m_text, linepos, namelen );	    else		/* an alias - expand it */		while (cp = getname(cp) ) {		    if (linepos > MAX_SM_FIELD) {			    fprintf (out, "\n%s: ", name);			    linepos = namelen;		    }		    mp2 = getm( cp, NULLCP, 0, AD_HOST, NULLCP);		    if (akvisible()) {			mp2->m_pers = getcpy(mp->m_mbox);			linepos = putone( adrformat(mp2), linepos, namelen );		    } else {			linepos = putone( mp2->m_text, linepos, namelen );		    }		    mnfree( mp2 );		}	} else {	    /* not a local name - use what the user typed */	    linepos = putone( mp->m_text, linepos, namelen );	}	mp2 = mp;	mp = mp->m_next;	mnfree( mp2 );    }    putc( '\n', out );}static int putone ( adr, pos, indent )register char *adr;register int pos;int indent;{    register int len;    static int linepos;    len = strlen( adr );    if (pos == indent)	linepos = pos;    else if ( linepos+len > outputlinelen ) {	fprintf ( out, ",\n%*s", indent, "");	linepos = indent;	pos += indent + 2;    }    else {	fputs( ", ", out );	linepos += 2;	pos += 2;    }    fputs( adr, out );    linepos += len;    return (pos+len);}/*  */static  insert_fcc (hdr, pp)struct	headers *hdr;char   *pp;{    char   *cp;    for (cp = pp; isspace (*cp); cp++)	continue;    for (pp += strlen (pp) - 1; pp > cp && isspace (*pp); pp--)	continue;    if (pp >= cp)	*++pp = NULL;    if (*cp == NULL)	return;    if (fccind >= FCCS)	adios (NULLCP, "too many %ss", hdr -> value);    fccfold[fccind++] = getcpy (cp);}#ifdef notdef/*    BCC GENERATION */static  make_bcc_file () {    int     fd,	    i,            child_id,	    status;    char   *vec[6];    FILE * in, *out;    (void)mktemp (bccfil);    if ((out = fopen (bccfil, "w")) == NULL)	adios (bccfil, "unable to create");    (void)chmod (bccfil, 0600);    fprintf (out, "Date: %s\n", dtimenow ());    fprintf (out, "From: %s\n", signature);    if (subject)	fprintf (out, "Subject: %s", subject);    fprintf (out, "BCC:\n\n------- Blind-Carbon-Copy\n\n");    (void)fflush (out);    if (filter == NULL) {	if ((fd = open (tmpfil, 0)) == NOTOK)	    adios (NULLCP, "unable to re-open");	cpydgst (fd, fileno (out), tmpfil, bccfil);	close (fd);    }    else {	vec[0] = r1bindex (mhlproc, '/');	for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)	    sleep (5);	switch (child_id) {	    case NOTOK: 		adios ("vfork", "unable to");	    case OK: 		dup2 (fileno (out), 1);		i = 1;		vec[i++] = "-forward";		vec[i++] = "-form";		vec[i++] = filter;		vec[i++] = tmpfil;		vec[i] = NULL;		execvp (mhlproc, vec);		adios (mhlproc, "unable to exec");	    default: 		if (status = pidwait (child_id, OK))		    admonish (NULL, "%s lost (status=0%o)", vec[0], status);		break;	}    }    fseek (out, 0L, 2);    fprintf (out, "\n------- End of Blind-Carbon-Copy\n");    (void)fclose (out);}#endif notdef/*    FCC INTERACTION */static  file (path)char   *path;{    int     i;    if (fccind == 0)	return;    for (i = 0; i < fccind; i++)	if (whomflg)	    printf ("Fcc: %s\n", fccfold[i]);	else	    fcc (path, fccfold[i]);}static fcc (file, folder)char   *file,       *folder;{    int     i,            child_id,            status;    char    fold[BUFSIZ];    if (verbose)	printf ("%sFcc: %s\n", msgstate == resent ? "Resent-" : "", folder);    (void)fflush (stdout);    for (i = 0; (child_id = vfork ()) == NOTOK && i < 5; i++)	sleep (5);    switch (child_id) {	case NOTOK: 	    if (!verbose)		fprintf (stderr, "  %sFcc %s: ",			msgstate == resent ? "Resent-" : "", folder);	    fprintf (verbose ? stdout : stderr, "no forks, so not ok\n");	    break;	case OK: 	    (void)sprintf (fold, "%s%s",		    *folder == '+' || *folder == '@' ? "" : "+", folder);	    execlp (fileproc, r1bindex (fileproc, '/'),		    "-link", "-file", file, fold, NULL);	    _exit (-1);	default: 	    if (status = pidwait (child_id, OK)) {		if (!verbose)		    fprintf (stderr, "  %sFcc %s: ",			    msgstate == resent ? "Resent-" : "", folder);		fprintf (verbose ? stdout : stderr,			" errored (0%o)\n", status);	    }    }    (void)fflush (stdout);}/*    TERMINATION *//* VARARGS2 */static die (what, fmt, a, b, c, d)char   *what,       *fmt,       *a,       *b,       *c,       *d;{    adios (what, fmt, a, b, c, d);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -