DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - metrics - download
Index: T n

⟦bdf068342⟧ TextFile

    Length: 2212 (0x8a4)
    Types: TextFile
    Names: »netmail.c«

Derivation

└─⟦9ae75bfbd⟧ Bits:30007242 EUUGD3: Starter Kit
    └─⟦3658e588a⟧ »EurOpenD3/mail/mh/mh-6.7.tar.Z« 
        └─⟦c75e36ecb⟧ 
            └─⟦this⟧ »mh-6.7/mts/mh/netmail.c« 

TextFile

/* netmail.c - queue mail for the network server */

/* LINTLIBRARY */

#include "../h/strings.h"
#include <stdio.h>
#include "../zotnet/mts.h"


#define	NOTOK	(-1)
#define	OK	0

#define	NBYTES	8


static int  files = 0;

static char hex[] = "0123456789ABCDEF";

static  union {
    char    nbytes[NBYTES];

    struct {
	long    clock;
	short   pid;
	short   id;
    }       stamp;
}       template;

static char quefil[BUFSIZ];
static char wrkfil[BUFSIZ];
static FILE * fp;


long    time ();
char   *cdate (), *ctime ();

/* \f

 */

int     nm_init (user, clock)
register char   *user;
register long   *clock;
{
    quefile (quefil, wrkfil);

    (void) unlink (wrkfil);
    if ((fp = fopen (wrkfil, "w")) == NULL)
	return NOTOK;
    (void) chmod (wrkfil, 0600);

    fprintf (fp, "%s %s\n", user, cdate (clock));

    return OK;
}


int     nm_wadr (mbox, host)
register char   *mbox,
 	        *host;
{
    fprintf (fp, "/%s %s\n", host, mbox);

    return OK;
}


int     nm_waend () {
    putc ('\n', fp);

    return OK;
}


int     nm_wtxt (buffer, cnt)
register char   *buffer;
register int     cnt;
{
    if (fwrite (buffer, sizeof *buffer, cnt, fp) != cnt)
	return NOTOK;

    return OK;
}


int     nm_wtend () {
    (void) fclose (fp);
    if (link (wrkfil, quefil) == NOTOK || unlink (wrkfil) == NOTOK)
	return NOTOK;

    return OK;
}

/* \f

 */

static  quefile (que, lnk)
register char   *que,
 	        *lnk;
{
    register char  *p,
                   *q;
    char    buffer[BUFSIZ];

    template.stamp.pid = getpid ();
    template.stamp.id = files++;
    if (files >= 256) {
	files = 0;
	sleep (1);
    }
    (void) time (&template.stamp.clock);

    p = buffer;
    for (q = template.nbytes; q < &template.nbytes[NBYTES]; q++) {
	*p++ = hex[(*q >> 4) & 0xf];
	*p++ = hex[(*q) & 0xf];
    }
    *p = NULL;

    (void) sprintf (que, "%s/%s", Mailqdir, buffer);
    (void) sprintf (lnk, "%s/%s", TMailqdir, buffer);
}

/* \f

 */

static char   *cdate (clock)
register long   *clock;
{
    char   *cp;

    cp = ctime (clock);
    cp[1] = cp[8];
    cp[2] = cp[9];
    cp[3] = '-';
    cp[7] = '-';
    cp[8] = cp[22];
    cp[9] = cp[23];
    cp[10] = '@';
    cp[19] = NULL;

    return cp + 1;
}