[alt.sources] FIDOGATE Part 2/6

mj@dfv.rwth-aachen.de (Martin Junius) (01/28/91)

---- Cut Here and feed the following to sh ----
#!/bin/sh
# This is part 02 of a multipart archive
# ============= getdate.y ==============
if test -f 'getdate.y' -a X"$1" != X"-c"; then
	echo 'x - skipping getdate.y (File already exists)'
else
echo 'x - extracting getdate.y (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'getdate.y' &&
%token ID MONTH DAY MERIDIAN NUMBER UNIT MUNIT SUNIT ZONE DAYZONE AGO
%{
X	/* 	Originally from: Steven M. Bellovin (unc!smb)	*/ 
X	/*	Dept. of Computer Science			*/
X	/*	University of North Carolina at Chapel Hill	*/
X	/*	@(#)getdate.y	2.17	11/30/87			*/
X
/* #include "defs.h" JF not used any more */
#include <sys/types.h>
#ifdef USG
struct timeb
{
X	time_t	time;
X	unsigned short millitm;
X	short	timezone;
X	short	dstflag;
};
#else
#include <sys/timeb.h>
#endif
#include <ctype.h>
X
#if defined(BSD4_2) || defined (BSD4_1C)
#include <sys/time.h>
#else /* sane */
#include <time.h>
#endif /* sane */
X
#ifdef __GNUC__
#define alloca __builtin_alloca
#else
#ifdef sparc
#include <alloca.h>
#endif
#endif
X
#define	NULL	0
#define daysec (24L*60L*60L)
X	static int timeflag, zoneflag, dateflag, dayflag, relflag;
X	static time_t relsec, relmonth;
X	static int hh, mm, ss, merid, day_light;
X	static int dayord, dayreq;
X	static int month, day, year;
X	static int ourzone;
#define AM 1
#define PM 2
#define DAYLIGHT 1
#define STANDARD 2
#define MAYBE    3
X
static time_t timeconv();
static time_t daylcorr();
static lookup();
X
%}
X
%%
timedate: 		/* empty */
X	| timedate item
X	;
X
item:	tspec
X		{timeflag++;}
X	| zone
X		{zoneflag++;}
X	| dtspec
X		{dateflag++;}
X	| dyspec
X		{dayflag++;}
X	| rspec
X		{relflag++;}
X	| nspec;
X
nspec:	NUMBER
X		{if (timeflag && dateflag && !relflag) year = $1;
X		else if ($1 > 10000) {
X			dateflag++;
X			day= $1%100;
X			month= ($1/100)%100;
X			year = month/10000;
X		} else {timeflag++;hh = $1/100;mm = $1%100;ss = 0;merid = 24;}};
X
tspec:	NUMBER MERIDIAN
X		{hh = $1; mm = 0; ss = 0; merid = $2;}
X	| NUMBER ':' NUMBER
X		{hh = $1; mm = $3; merid = 24;}
X	| NUMBER ':' NUMBER MERIDIAN
X		{hh = $1; mm = $3; merid = $4;}
X	| NUMBER ':' NUMBER NUMBER
X		{hh = $1; mm = $3; merid = 24;
X		day_light = STANDARD; ourzone = -($4%100 + 60*($4/100));}
X	| NUMBER ':' NUMBER ':' NUMBER
X		{hh = $1; mm = $3; ss = $5; merid = 24;}
X	| NUMBER ':' NUMBER ':' NUMBER MERIDIAN
X		{hh = $1; mm = $3; ss = $5; merid = $6;}
X	| NUMBER ':' NUMBER ':' NUMBER NUMBER
X		{hh = $1; mm = $3; ss = $5; merid = 24;
X		day_light = STANDARD; ourzone = -($6%100 + 60*($6/100));};
X
zone:	ZONE
X		{ourzone = $1; day_light = STANDARD;}
X	| DAYZONE
X		{ourzone = $1; day_light = DAYLIGHT;};
X
dyspec:	DAY
X		{dayord = 1; dayreq = $1;}
X	| DAY ','
X		{dayord = 1; dayreq = $1;}
X	| NUMBER DAY
X		{dayord = $1; dayreq = $2;};
X
dtspec:	NUMBER '/' NUMBER
X		{month = $1; day = $3;}
X	| NUMBER '/' NUMBER '/' NUMBER
X		{month = $1; day = $3; year = $5;}
X	| MONTH NUMBER
X		{month = $1; day = $2;}
X	| MONTH NUMBER ',' NUMBER
X		{month = $1; day = $2; year = $4;}
X	| NUMBER MONTH
X		{month = $2; day = $1;}
X	| NUMBER MONTH NUMBER
X		{month = $2; day = $1; year = $3;};
X
X
rspec:	NUMBER UNIT
X		{relsec +=  60L * $1 * $2;}
X	| NUMBER MUNIT
X		{relmonth += $1 * $2;}
X	| NUMBER SUNIT
X		{relsec += $1;}
X	| UNIT
X		{relsec +=  60L * $1;}
X	| MUNIT
X		{relmonth += $1;}
X	| SUNIT
X		{relsec++;}
X	| rspec AGO
X		{relsec = -relsec; relmonth = -relmonth;};
%%
X
static int mdays[12] =
X	{31, 0, 31,  30, 31, 30,  31, 31, 30,  31, 30, 31};
#define epoch 1970
X
extern struct tm *localtime();
X
static time_t
dateconv(mm, dd, yy, h, m, s, mer, zone, dayflag)
int mm, dd, yy, h, m, s, mer, zone, dayflag;
{
X	time_t tod, jdate;
X	register int i;
X
X	if (yy < 0) yy = -yy;
X	if (yy < 100) yy += 1900;
X	mdays[1] = 28 + (yy%4 == 0 && (yy%100 != 0 || yy%400 == 0));
X	if (yy < epoch || yy > 1999 || mm < 1 || mm > 12 ||
X		dd < 1 || dd > mdays[--mm]) return (-1);
X	jdate = dd-1;
X        for (i=0; i<mm; i++) jdate += mdays[i];
X	for (i = epoch; i < yy; i++) jdate += 365 + (i%4 == 0);
X	jdate *= daysec;
X	jdate += zone * 60L;
X	if ((tod = timeconv(h, m, s, mer)) < 0) return (-1);
X	jdate += tod;
X	if (dayflag==DAYLIGHT || (dayflag==MAYBE&&localtime(&jdate)->tm_isdst))
X		jdate += -1*60*60;
X	return (jdate);
}
X
static time_t
dayconv(ord, day, now)
int ord, day; time_t now;
{
X	register struct tm *loctime;
X	time_t tod;
X
X	tod = now;
X	loctime = localtime(&tod);
X	tod += daysec * ((day - loctime->tm_wday + 7) % 7);
X	tod += 7*daysec*(ord<=0?ord:ord-1);
X	return daylcorr(tod, now);
}
X
static time_t
timeconv(hh, mm, ss, mer)
register int hh, mm, ss, mer;
{
X	if (mm < 0 || mm > 59 || ss < 0 || ss > 59) return (-1);
X	switch (mer) {
X		case AM: if (hh < 1 || hh > 12) return(-1);
X			 return (60L * ((hh%12)*60L + mm)+ss);
X		case PM: if (hh < 1 || hh > 12) return(-1);
X			 return (60L * ((hh%12 +12)*60L + mm)+ss);
X		case 24: if (hh < 0 || hh > 23) return (-1);
X			 return (60L * (hh*60L + mm)+ss);
X		default: return (-1);
X	}
}
X
static time_t
monthadd(sdate, relmonth)
time_t sdate, relmonth;
{
X	struct tm *ltime;
X	time_t dateconv();
X	int mm, yy;
X
X	if (relmonth == 0) return 0;
X	ltime = localtime(&sdate);
X	mm = 12*ltime->tm_year + ltime->tm_mon + relmonth;
X	yy = mm/12;
X	mm = mm%12 + 1;
X	return daylcorr(dateconv(mm, ltime->tm_mday, yy, ltime->tm_hour,
X		ltime->tm_min, ltime->tm_sec, 24, ourzone, MAYBE), sdate);
}
X
static time_t
daylcorr(future, now)
time_t future, now;
{
X	int fdayl, nowdayl;
X
X	nowdayl = (localtime(&now)->tm_hour+1) % 24;
X	fdayl = (localtime(&future)->tm_hour+1) % 24;
X	return (future-now) + 60L*60L*(nowdayl-fdayl);
}
X
static char *lptr;
X
static yylex()
{
X	extern int yylval;
X	int sign;
X	register char c;
X	register char *p;
X	char idbuf[20];
X	int pcnt;
X
X	for (;;) {
X		while (isspace(*lptr))
X			lptr++;
X
X		if (isdigit(c = *lptr) || c == '-' || c == '+') {
X			if (c== '-' || c == '+') {
X				if (c=='-') sign = -1;
X				else sign = 1;
X				if (!isdigit(*++lptr)) {
X					/* yylval = sign; return (NUMBER); */
X					return yylex();	/* skip the '-' sign */
X				}
X			} else sign = 1;
X			yylval = 0;
X			while (isdigit(c = *lptr++))
X				yylval = 10*yylval + c - '0';
X			yylval *= sign;
X			lptr--;
X			return (NUMBER);
X
X		} else if (isalpha(c)) {
X			p = idbuf;
X			while (isalpha(c = *lptr++) || c=='.')
X				if (p < &idbuf[sizeof(idbuf)-1]) *p++ = c;
X			*p = '\0';
X			lptr--;
X			return (lookup(idbuf));
X		}
X
X		else if (c == '(') {
X			pcnt = 0;
X			do {
X				c = *lptr++;
X				if (c == '\0') return(c);
X				else if (c == '(') pcnt++;
X				else if (c == ')') pcnt--;
X			} while (pcnt > 0);
X		}
X
X		else return (*lptr++);
X	}
}
X
struct table {
X	char *name;
X	int type, value;
};
X
static struct table mdtab[] = {
X	{"january", MONTH, 1},
X	{"february", MONTH, 2},
X	{"march", MONTH, 3},
X	{"april", MONTH, 4},
X	{"may", MONTH, 5},
X	{"june", MONTH, 6},
X	{"july", MONTH, 7},
X	{"august", MONTH, 8},
X	{"september", MONTH, 9},
X	{"sept", MONTH, 9},
X	{"october", MONTH, 10},
X	{"november", MONTH, 11},
X	{"december", MONTH, 12},
X
X	{"sunday", DAY, 0},
X	{"monday", DAY, 1},
X	{"tuesday", DAY, 2},
X	{"tues", DAY, 2},
X	{"wednesday", DAY, 3},
X	{"wednes", DAY, 3},
X	{"thursday", DAY, 4},
X	{"thur", DAY, 4},
X	{"thurs", DAY, 4},
X	{"friday", DAY, 5},
X	{"saturday", DAY, 6},
X	{0, 0, 0}};
X
#define HRS *60
#define HALFHR 30
X
static struct table mztab[] = {
X	{"a.m.", MERIDIAN, AM},
X	{"am", MERIDIAN, AM},
X	{"p.m.", MERIDIAN, PM},
X	{"pm", MERIDIAN, PM},
X	{"nst", ZONE, 3 HRS + HALFHR},		/* Newfoundland */
X	{"n.s.t.", ZONE, 3 HRS + HALFHR},
X	{"ast", ZONE, 4 HRS},		/* Atlantic */
X	{"a.s.t.", ZONE, 4 HRS},
X	{"adt", DAYZONE, 4 HRS},
X	{"a.d.t.", DAYZONE, 4 HRS},
X	{"est", ZONE, 5 HRS},		/* Eastern */
X	{"e.s.t.", ZONE, 5 HRS},
X	{"edt", DAYZONE, 5 HRS},
X	{"e.d.t.", DAYZONE, 5 HRS},
X	{"cst", ZONE, 6 HRS},		/* Central */
X	{"c.s.t.", ZONE, 6 HRS},
X	{"cdt", DAYZONE, 6 HRS},
X	{"c.d.t.", DAYZONE, 6 HRS},
X	{"mst", ZONE, 7 HRS},		/* Mountain */
X	{"m.s.t.", ZONE, 7 HRS},
X	{"mdt", DAYZONE, 7 HRS},
X	{"m.d.t.", DAYZONE, 7 HRS},
X	{"pst", ZONE, 8 HRS},		/* Pacific */
X	{"p.s.t.", ZONE, 8 HRS},
X	{"pdt", DAYZONE, 8 HRS},
X	{"p.d.t.", DAYZONE, 8 HRS},
X	{"yst", ZONE, 9 HRS},		/* Yukon */
X	{"y.s.t.", ZONE, 9 HRS},
X	{"ydt", DAYZONE, 9 HRS},
X	{"y.d.t.", DAYZONE, 9 HRS},
X	{"hst", ZONE, 10 HRS},		/* Hawaii */
X	{"h.s.t.", ZONE, 10 HRS},
X	{"hdt", DAYZONE, 10 HRS},
X	{"h.d.t.", DAYZONE, 10 HRS},
X
X	{"gmt", ZONE, 0 HRS},
X	{"g.m.t.", ZONE, 0 HRS},
X	{"bst", DAYZONE, 0 HRS},		/* British Summer Time */
X	{"b.s.t.", DAYZONE, 0 HRS},
X	{"eet", ZONE, 0 HRS},		/* European Eastern Time */
X	{"e.e.t.", ZONE, 0 HRS},
X	{"eest", DAYZONE, 0 HRS},	/* European Eastern Summer Time */
X	{"e.e.s.t.", DAYZONE, 0 HRS},
X	{"met", ZONE, -1 HRS},		/* Middle European Time */
X	{"m.e.t.", ZONE, -1 HRS},
X	{"mest", DAYZONE, -1 HRS},	/* Middle European Summer Time */
X	{"m.e.s.t.", DAYZONE, -1 HRS},
X	{"wet", ZONE, -2 HRS },		/* Western European Time */
X	{"w.e.t.", ZONE, -2 HRS },
X	{"west", DAYZONE, -2 HRS},	/* Western European Summer Time */
X	{"w.e.s.t.", DAYZONE, -2 HRS},
X
X	{"jst", ZONE, -9 HRS},		/* Japan Standard Time */
X	{"j.s.t.", ZONE, -9 HRS},	/* Japan Standard Time */
X					/* No daylight savings time */
X
X	{"aest", ZONE, -10 HRS},	/* Australian Eastern Time */
X	{"a.e.s.t.", ZONE, -10 HRS},
X	{"aesst", DAYZONE, -10 HRS},	/* Australian Eastern Summer Time */
X	{"a.e.s.s.t.", DAYZONE, -10 HRS},
X	{"acst", ZONE, -(9 HRS + HALFHR)},	/* Australian Central Time */
X	{"a.c.s.t.", ZONE, -(9 HRS + HALFHR)},
X	{"acsst", DAYZONE, -(9 HRS + HALFHR)},	/* Australian Central Summer */
X	{"a.c.s.s.t.", DAYZONE, -(9 HRS + HALFHR)},
X	{"awst", ZONE, -8 HRS},		/* Australian Western Time */
X	{"a.w.s.t.", ZONE, -8 HRS},	/* (no daylight time there, I'm told */
X	{0, 0, 0}};
X
static struct table unittb[] = {
X	{"year", MUNIT, 12},
X	{"month", MUNIT, 1},
X	{"fortnight", UNIT, 14*24*60},
X	{"week", UNIT, 7*24*60},
X	{"day", UNIT, 1*24*60},
X	{"hour", UNIT, 60},
X	{"minute", UNIT, 1},
X	{"min", UNIT, 1},
X	{"second", SUNIT, 1},
X	{"sec", SUNIT, 1},
X	{0, 0, 0}};
X
static struct table othertb[] = {
X	{"tomorrow", UNIT, 1*24*60},
X	{"yesterday", UNIT, -1*24*60},
X	{"today", UNIT, 0},
X	{"now", UNIT, 0},
X	{"last", NUMBER, -1},
X	{"this", UNIT, 0},
X	{"next", NUMBER, 2},
X	{"first", NUMBER, 1},
X	/* {"second", NUMBER, 2}, */
X	{"third", NUMBER, 3},
X	{"fourth", NUMBER, 4},
X	{"fifth", NUMBER, 5},
X	{"sixth", NUMBER, 6},
X	{"seventh", NUMBER, 7},
X	{"eigth", NUMBER, 8},
X	{"ninth", NUMBER, 9},
X	{"tenth", NUMBER, 10},
X	{"eleventh", NUMBER, 11},
X	{"twelfth", NUMBER, 12},
X	{"ago", AGO, 1},
X	{0, 0, 0}};
X
static struct table milzone[] = {
X	{"a", ZONE, 1 HRS},
X	{"b", ZONE, 2 HRS},
X	{"c", ZONE, 3 HRS},
X	{"d", ZONE, 4 HRS},
X	{"e", ZONE, 5 HRS},
X	{"f", ZONE, 6 HRS},
X	{"g", ZONE, 7 HRS},
X	{"h", ZONE, 8 HRS},
X	{"i", ZONE, 9 HRS},
X	{"k", ZONE, 10 HRS},
X	{"l", ZONE, 11 HRS},
X	{"m", ZONE, 12 HRS},
X	{"n", ZONE, -1 HRS},
X	{"o", ZONE, -2 HRS},
X	{"p", ZONE, -3 HRS},
X	{"q", ZONE, -4 HRS},
X	{"r", ZONE, -5 HRS},
X	{"s", ZONE, -6 HRS},
X	{"t", ZONE, -7 HRS},
X	{"u", ZONE, -8 HRS},
X	{"v", ZONE, -9 HRS},
X	{"w", ZONE, -10 HRS},
X	{"x", ZONE, -11 HRS},
X	{"y", ZONE, -12 HRS},
X	{"z", ZONE, 0 HRS},
X	{0, 0, 0}};
X
static 
lookup(id)
char *id;
{
#define gotit (yylval=i->value,  i->type)
X
X	char idvar[128];
X	register char *j, *k;
X	register struct table *i;
X	int abbrev;
X
X	(void) strcpy(idvar, id);
X	j = idvar;
X	k = id - 1;
X	while (*++k)
X		*j++ = isupper(*k) ? tolower(*k) : *k;
X	*j = '\0';
X
X	if (strlen(idvar) == 3)
X		abbrev = 1;
X	else
X		if (strlen(idvar) == 4 && idvar[3] == '.') {
X			abbrev = 1;
X			idvar[3] = '\0';
X		}
X	else
X		abbrev = 0;
X
X	for (i = mdtab; i->name; i++) {
X		k = idvar;
X		for (j = i->name; *j++ == *k++;) {
X			if (abbrev && j == i->name+3)
X				return gotit;
X			if (j[-1] == 0)
X				return gotit;
X		}
X	}
X
X	for (i = mztab; i->name; i++)
X		if (strcmp(i->name, idvar) == 0)
X			return gotit;
X
X	for (i=mztab; i->name; i++)
X		if (strcmp(i->name, idvar) == 0)
X			return gotit;
X
X	for (i=unittb; i->name; i++)
X		if (strcmp(i->name, idvar) == 0)
X			return gotit;
X
X	if (idvar[strlen(idvar)-1] == 's')
X		idvar[strlen(idvar)-1] = '\0';
X
X	for (i=unittb; i->name; i++)
X		if (strcmp(i->name, idvar) == 0)
X			return gotit;
X
X	for (i = othertb; i->name; i++)
X		if (strcmp(i->name, idvar) == 0)
X			return gotit;
X
X	if (strlen(idvar) == 1 && isalpha(*idvar)) {
X		for (i = milzone; i->name; i++)
X			if (strcmp(i->name, idvar) == 0)
X				return gotit;
X	}
X
X	return ID;
}
X
time_t
getdate(p, now)
char *p;
struct timeb *now;
{
#define mcheck(f)	if (f>1) err++
X	time_t monthadd();
X	int err;
X	struct tm *lt;
X	struct timeb ftz;
X
X	time_t sdate, tod;
X
X	lptr = p;
X	if (now == ((struct timeb *) NULL)) {
X		now = &ftz;
X		ftime(&ftz);
X	}
X	lt = localtime(&now->time);
X	year = lt->tm_year;
X	month = lt->tm_mon+1;
X	day = lt->tm_mday;
X	relsec = 0; relmonth = 0;
X	timeflag=zoneflag=dateflag=dayflag=relflag=0;
X	ourzone = now->timezone;
X	day_light = MAYBE;
X	hh = mm = ss = 0;
X	merid = 24;
X
X	if (err = yyparse()) return (-1);
X
X	mcheck(timeflag);
X	mcheck(zoneflag);
X	mcheck(dateflag);
X	mcheck(dayflag);
X
X	if (err) return (-1);
X	if (dateflag || timeflag || dayflag) {
X		sdate = dateconv(month,day,year,hh,mm,ss,merid,ourzone,day_light);
X		if (sdate < 0) return -1;
X	}
X	else {
X		sdate = now->time;
X		if (relflag == 0)
X			sdate -= (lt->tm_sec + lt->tm_min*60 +
X				lt->tm_hour*(60L*60L));
X	}
X
X	sdate += relsec;
X	sdate += monthadd(sdate, relmonth);
X
X	if (dayflag && !dateflag) {
X		tod = dayconv(dayord, dayreq, sdate);
X		sdate += tod;
X	}
X
X	/*
X	** Have to do *something* with a legitimate -1 so it's distinguishable
X	** from the error return value.  (Alternately could set errno on error.)
X	*/
X	return (sdate == -1) ? 0 : sdate;
}
X
static
yyerror(s)
char *s;
{
}
X
#ifdef USG
ftime(timeb)
struct timeb *timeb;
{
X	extern long timezone;
X	extern int daylight;
X	long t = 0;
X
X	localtime(&t);	/* Dummy to init timzeone */
X	ctime(&t);		/* Dummy to init timzeone (XENIX) */
X	time(&(timeb->time));
X	timeb->millitm=0;
X	timeb->timezone=timezone/60;	/* Timezone is in seconds! */
X	timeb->dstflag=daylight;
}
#endif
SHAR_EOF
chmod 0644 getdate.y ||
echo 'restore of getdate.y failed'
Wc_c="`wc -c < 'getdate.y'`"
test 13426 -eq "$Wc_c" ||
	echo 'getdate.y: original size 13426, current size' "$Wc_c"
fi
# ============= frecv ==============
if test -f 'frecv' -a X"$1" != X"-c"; then
	echo 'x - skipping frecv (File already exists)'
else
echo 'x - extracting frecv (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'frecv' &&
:
#!/bin/sh
#
# $Id: frecv.sh,v 1.4 91/01/27 15:36:40 mj Exp $
#
# This shell script feeds the msg in SPOOL/unpacked to
# either rnews or rmail, depending on their destination:
#
#     N.xxxx  -> rnews
#     M.xxxx  -> rmail
#
# Must be used after fido mail packets were processed
# with funpack.
#
X
SPOOL=/u/spool/fidonet
X
#
# Test for addresses allowed to FIDONET users
#
#     name
#     name@hippo
#     name@hippo.uucp
#     name@slcdec               (UUCP feed)
#     name@system.domain.de     (DNet)
#
name="[#$%&*+-/0-9=?A-Z_a-z.]+"
pattern1="^${name}$"
pattern2="^${name}@hippo(\.uucp)?$"
pattern3="^${name}@${name}\.de$"
pattern4="^${name}@slcdec$"
pattern="$pattern1 $pattern2 $pattern3 $pattern4"
addrok="no"
X
testaddr() {
X	addrok="no"
X	for p in $pattern
X	do
X		echo $1 | egrep "$p" >/dev/null
X		if [ $? -eq 0 ]; then addrok="yes"; break; fi
X	done
}
X
X
X
cd ${SPOOL}/unpacked
X
#
# Process news messages
#
for f in N.*
do
X	if [ -f $f ]
X	then
X		rnews < $f
X		status=$?
X		if [ $status -eq 0 ]
X		then
X			rm -f $f
X		else
X			mv $f ../bad
X		fi
X	fi
done
X
#
# Process messages for mail
#
for f in M.*
do
X	if [ -f $f ]
X	then
X		set X `sed <$f -n -e '/^To:/{' -e 's/To: *//p' -e q -e '}'`
X		shift
X		set X "$@" `sed <$f -n -e '/^Cc:/{' -e 's/Cc: *//p' -e q -e '}'`
X		shift
X		set X "$@" `sed <$f -n -e '/^Bcc:/{' -e 's/Bcc: *//p' -e q -e '}'`
X		shift
X		recv=`echo $@ | sed -e 's/ *(.*)//g'`
X		for i in $recv
X		do
X			testaddr $i
X			if [ $addrok = "no" ]; then break; fi
X		done
X		if [ $addrok = "yes" ]; then
X			rmail $recv < $f
X			status=$?
X			if [ $status -eq 0 ]
X			then
X				rm -f $f
X			else
X				mv $f ../bad
X			fi
X		else
X			mv $f ../bad
X		fi
X	fi
done
X
Xexit 0
SHAR_EOF
chmod 0755 frecv ||
echo 'restore of frecv failed'
Wc_c="`wc -c < 'frecv'`"
test 1655 -eq "$Wc_c" ||
	echo 'frecv: original size 1655, current size' "$Wc_c"
fi
# ============= config.h ==============
if test -f 'config.h' -a X"$1" != X"-c"; then
	echo 'x - skipping config.h (File already exists)'
else
echo 'x - extracting config.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'config.h' &&
/*:ts=4*/
/*****************************************************************************
X * FIDOGATE --- Gateway software UNIX <-> FIDO
X *
X * $Id: config.h,v 1.14 91/01/05 13:05:29 mj Exp $
X *
X * Configuration header file
X *
X * $Log:	config.h,v $
X * Revision 1.14  91/01/05  13:05:29  mj
X * Changed domain name to ".dfv.rwth-aachen.de"
X * 
X * Revision 1.13  90/12/10  16:33:31  mj
X * Moved define of LOCK_LOCKF from Makefile to config.h.
X * 
X * Revision 1.12  90/12/09  17:32:03  mj
X * New #define's for mail forwarding in rmail (UUCPFEED). Removed
X * GATEWAY definition.
X * 
X * Revision 1.11  90/12/02  21:21:44  mj
X * Changed program header to mention both authors of the original
X * software posted to alt.sources.
X * 
X * Revision 1.10  90/12/01  17:48:26  mj
X * Removed unnecessary #defines of JUNK and JUNK_AREA.
X * 
X * Revision 1.9  90/11/23  21:51:19  mj
X * Removed #define's of INT16 and SWAB_BYTES. Not necessary any more
X * because of the rewrite of fpack.
X * 
X * Revision 1.8  90/11/05  20:49:31  mj
X * Changed my signature in all program headers.
X * 
X * Revision 1.7  90/09/16  17:35:27  mj
X * Changed FIDODOMAIN to ".fidonet.org".
X * 
X * Revision 1.6  90/09/03  17:50:45  mj
X * Changed to new address.
X * 2:242/6.1  aka  6000/1
X * 
X * Revision 1.5  90/08/12  14:13:31  mj
X * Added definition for FIDO MSGID sequencer (MSGIDSEQ).
X * 
X * Revision 1.4  90/07/30  20:00:16  mj
X * Added support for new style FIDO addresses:
X *     p<point>.f<node>.n<net>.z<zone>.FIDODOMAIN
X * FIDODOMAIN is defined in config.h
X * 
X * Revision 1.3  90/07/15  10:22:15  mj
X * Changed MAX_LINELEN to 80.
X * 
X * Revision 1.2  90/06/28  22:03:53  mj
X * Much rework of the sources, no more hsu.h and other clean up.
X * rmail improved, now handles special XENIX quirks.
X * 
X * Revision 1.1  90/06/21  21:06:05  mj
X * Everything seems to work, so this delta was made.
X * 
X * Revision 1.0  90/06/21  18:52:36  mj
X * Initial revision
X * 
X *
X *****************************************************************************
X * This version hacked and maintained by:
X *    _____ _____
X *   |     |___  |   Martin Junius     FIDO:    2:242/6.1   2:242/6.0
X *   | | | |   | |   Republikplatz 3   DOMAIN:  mju@dfv.rwth-aachen.de
X *   |_|_|_|_____|   D-5100 Aachen     Tel. (Voice) 0241-86931
X *
X * Original version of these programs and files:
X *
X *   Teemu Torma
X *   Heikki Suonsivu   FIDO: 2:504/1   UUCP: ...!mcsun!santra!hsu
X *
X *****************************************************************************/
X
/*
X * This is our net and node number
X *
X * We're 2:242/6.1 with fake address 2:6000/1
X */
#define REAL_ZONE		2
#define REAL_REGION		24
#define REAL_NET		242
#define REAL_NODE		6
#define REAL_POINT		1
X
#define MY_ZONE			2
#define MY_REGION		24
#define MY_NET			6000
#define MY_NODE			1
#define MY_POINT		0
X
#define MY_NAME			"Hipposoft"
X
X
/*
X * This is where our mail goes to ...
X */
#define REM_ZONE		2
#define REM_REGION		24
#define REM_NET			242
#define REM_NODE		6
#define REM_POINT		0
#define REM_NAME		"Bossnode"
X 
/*
X * Echo feed (currently not used)
X */
#define ECHOFEED_NET	242
#define ECHOFEED_NODE	6
X
/*
X * Domain suffix (added to hostname)
X */
#define MY_HOSTNAME		"hippo"
#define MY_DOMAIN		".dfv.rwth-aachen.de"
X
/*
X * UUCP feed (i.e. system we send UUCP mail to)
X */
#define UUCPFEED		"slcdec"
#define UUCPFEED_DOMAIN	".dfv.rwth-aachen.de"
X
/*
X * Domain suffix for FIDO net addresses
X */
#define FIDODOMAIN		".fidonet.org"
X
/*
X * Enable new style addresses
X *     p<point>.f<node>.n<net>.z<zone>.FIDODOMAIN
X * versus old style ones
X *     <point>.<node>.<net>.<zone>.fidonet
X */
#define NEW_STYLE_ADDRESS				/**/
X
X
/*
X * Directories the various programs work on
X */
X
#define SPOOL			"/u/spool/fidonet"			/* main spool directory */
#define SPOOL_BAD		"/u/spool/fidonet/bad"		/* rejected by rnews/rmail */
#define SPOOL_IN		"/u/spool/fidonet/in"		/* incoming packets */
#define SPOOL_OUT		"/u/spool/fidonet/out"		/* outgoing mail */
#define SPOOL_UNPACKED	"/u/spool/fidonet/unpacked"	/* output of funpack */
#define SPOOL_SENT		"/u/spool/fidonet/sent"		/* sent packets */
X
#define LIBDIR			"/u/lib/fidonet"			/* config files / progs */
#define LOGFILE			"/u/lib/fidonet/log"		/* log file */
#define IDSEQUENCE		"/u/lib/fidonet/idseq"		/* message id sequence */
#define IPACKETSEQUENCE "/u/lib/fidonet/ipacketseq"	/* input packet sequence */
#define OPACKETSEQUENCE "/u/lib/fidonet/opacketseq" /* output packet sequence */
#define BADSEQ			"/u/lib/fidonet/badseq"		/* bad messages sequence */
#define JOBSEQ			"/u/lib/fidonet/seq"		/* job number sequence */
#define MSGIDSEQ		"/u/lib/fidonet/msgidseq"	/* for generating ^AMSGID:*/
#define ALIAS			"/u/lib/fidonet/Alias"		/* alias file */
#define AREAS			"/u/lib/fidonet/Areas"		/* areas file */
X
X
/*
X * Enable nodelist support
X */
/*#define NODELIST_SUPPORT							/* Use FIDO nodelist */
X
X
/*
X * mail receiver for fidonet
X */
#define RFMAIL "/u/lib/fidonet/rfmail"				/* fido mail receiver */
/*#define RFMAIL "/u/mj/news/fidogate/rfmail"			/* test version */
X
/*
X * Program which receives unpacked news articles
X */
#define RNEWS "/bin/rnews"							/* News receiver */
X
/*
X * Program which receives mail from fido net
X */
#define RMAIL "/usr/bin/rmail"						/* Mail receiver */
/*
X * There is a replacement for rmail
X * included in this package, which accepts fido net
X * domain addresses and feeds this mail to rfmail.
X * If you use the included rmail, you must rename
X * the old rmail to ormail and install the included
X * rmail as /usr/bin/rmail.
X */
/*#define RECVMAIL "/usr/bin/ormail"					/* Mail receiver */
#define RECVMAIL "/usr/lib/mail/execmail"			/* XENIX */
/*
X * Define this if you want rfmail to return underlivered mail. You do
X * not need this if you are running sendmail or similiar which returns
X * undelivered mail.
X */
#define RETURN_FAILED_MAIL /**/
X
X
/*
X * Lowest user id
X */
#define USERUID 50
X
/*
X * System dependend configuration
X */
X
/***** Operating system *****/
#define USG										/* System V */
/*#define BSD									/* BSD 4.2+ */
X
/***** File locking *****/
#define LOCK_LOCKF								/* Use lockf(), else locking() */
X
X
/*
X * parameters for fcall
X */
X
/* How many seconds wait before starting up fidonet handshake */
#define PREWAIT 5
X
/* How many seconds to wait for line to clear */
#define WAITCLEAR 2
X
/* How many tries to give for xmodem startup in send. This should be low
X   value, it just gives possibility to retry xmodem startup if modems
X   handshaked too fast (really a acu configuration problems, dial should
X   return after it has a working line available!) */
#define MAX_SEND_RETRIES 1
X
/* Maximum baud rate to use when calling out */
#define MAXBAUD 1200
X
/* Define minimum baud rate to use when calling out */
#define MINBAUD 300
X
/* Width of formatted messages. Lines will be wrapped to be less
X   than this. If word is longer than 2/3s of MAX_LINELEN, it will be
X   cut instead of correct wrapping. */
#define MAX_LINELEN 80
X
/* Dial translation table. first string stripped out, second one replaced */
X
#define DIALTABLE "358-0-", "",  "358-", "9",  "", "990"
SHAR_EOF
chmod 0644 config.h ||
echo 'restore of config.h failed'
Wc_c="`wc -c < 'config.h'`"
test 7068 -eq "$Wc_c" ||
	echo 'config.h: original size 7068, current size' "$Wc_c"
fi
# ============= packet.h ==============
if test -f 'packet.h' -a X"$1" != X"-c"; then
	echo 'x - skipping packet.h (File already exists)'
else
echo 'x - extracting packet.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'packet.h' &&
/*:ts=4*/
/*****************************************************************************
X * FIDOGATE --- Gateway software UNIX <-> FIDO
X *
X * $Id: packet.h,v 1.3 90/12/09 18:36:16 mj Exp $
X *
X * FIDOnet packet definitions
X *
X * $Log:	packet.h,v $
X * Revision 1.3  90/12/09  18:36:16  mj
X * Reformatted code and added #define's for sizes of FIDO header fields.
X * 
X * Revision 1.2  90/12/02  21:22:20  mj
X * Changed program header to mention both authors of the original
X * software posted to alt.sources.
X * 
X * Revision 1.1  90/11/05  20:50:53  mj
X * Changed my signature in all program headers.
X * 
X * Revision 1.0  90/06/21  19:15:14  mj
X * Initial revision
X * 
X *
X *****************************************************************************
X * This version hacked and maintained by:
X *    _____ _____
X *   |     |___  |   Martin Junius     FIDO:    2:242/6.1   2:242/6.0
X *   | | | |   | |   Republikplatz 3   DOMAIN:  mju@dfv.rwth-aachen.de
X *   |_|_|_|_____|   D-5100 Aachen     Tel. (Voice) 0241-86931
X *
X * Original version of these programs and files:
X *
X *   Teemu Torma
X *   Heikki Suonsivu   FIDO: 2:504/1   UUCP: ...!mcsun!santra!hsu
X *
X *****************************************************************************/
X
/* Structure for packet header. */
X
typedef struct _packet {
X	short orig_node;				/* originating node */
X	short dest_node;				/* destinating mode */
X	short year;						/* packing year (e.g. 1986) */
X	short month;					/* 0-11 for Jan - Dec */
X	short day;						/* 1-31 */
X	short hour;						/* 0-23 */
X	short minute;					/* 0-59 */
X	short second;					/* 0-59 */
X	short rate;						/* maximum baud rate */
X	short ver;						/* header version */
X	short orig_net;					/* originating net */
X	short dest_net;					/* destination net */
X	char product;					/* product */
X	char x1;						/* Extra byte */
#ifdef FIDO_V11w
X	short fill[16];					/* extra space */
#else
X	char pwd_kludge[8];
X	short orig_zone;
X	short dest_zone;
X	char B_fill2[16];
X	long B_fill3;
#endif
} Packet;
X
/* Attributes tranferred via mail. */
X
#define ATTR_PRIVATE	0000001		/* private msg */
#define ATTR_CRASH		0000002		/* crash mail */
#define ATTR_FILE		0000020		/* files attached */
#define ATTR_UNUSED		0002000		/* unused */
#define ATTR_RRR		0010000		/* SEAdog only */
#define ATTR_IRR		0020000		/* SEAdog only */
#define ATTR_AUDREQ		0040000		/* SEAdog only */
X
/* Packet and message types. */
X
#define HDRVER			2
#define MSGTYPE			2
X
/* Sizes of to/from/subject/date field */
#define SIZE_FROM		36
#define SIZE_TO			36
#define SIZE_SUBJECT	72
#define SIZE_DATE		20
SHAR_EOF
chmod 0644 packet.h ||
echo 'restore of packet.h failed'
Wc_c="`wc -c < 'packet.h'`"
test 2561 -eq "$Wc_c" ||
	echo 'packet.h: original size 2561, current size' "$Wc_c"
fi
# ============= shuffle.h ==============
if test -f 'shuffle.h' -a X"$1" != X"-c"; then
	echo 'x - skipping shuffle.h (File already exists)'
else
echo 'x - extracting shuffle.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'shuffle.h' &&
/*:ts=4*/
/*****************************************************************************
X * FIDOGATE --- Gateway software UNIX <-> FIDO
X *
X * $Id: shuffle.h,v 1.3 90/12/02 21:22:39 mj Exp $
X *
X * Something very special ... ;-)
X *
X * $Log:	shuffle.h,v $
X * Revision 1.3  90/12/02  21:22:39  mj
X * Changed program header to mention both authors of the original
X * software posted to alt.sources.
X * 
X * Revision 1.2  90/11/05  20:51:08  mj
X * Changed my signature in all program headers.
X * 
X * Revision 1.1  90/06/28  22:05:04  mj
X * Much rework of the sources, no more hsu.h and other clean up.
X * rmail improved, now handles special XENIX quirks.
X * 
X * Revision 1.0  90/06/21  19:08:09  mj
X * Initial revision
X * 
X *
X *****************************************************************************
X * This version hacked and maintained by:
X *    _____ _____
X *   |     |___  |   Martin Junius     FIDO:    2:242/6.1   2:242/6.0
X *   | | | |   | |   Republikplatz 3   DOMAIN:  mju@dfv.rwth-aachen.de
X *   |_|_|_|_____|   D-5100 Aachen     Tel. (Voice) 0241-86931
X *
X * Original version of these programs and files:
X *
X *   Teemu Torma
X *   Heikki Suonsivu   FIDO: 2:504/1   UUCP: ...!mcsun!santra!hsu
X *
X *****************************************************************************/
X
#define loop_increment(x,y) (x = (++x >= (y)) ? 0 : x)
#define loop_decrement(x,y) (x = (--x < 0) ? (y)-1 : x)
X
#define MAX_CONVERT_BUFFERS		40
#define MAX_CONVERT_BUFLEN		80
X
static char bufs[MAX_CONVERT_BUFFERS][MAX_CONVERT_BUFLEN], *tcharp;
static int bflag;
X
#define SHUFFLEBUFFERS \
loop_increment(bflag, MAX_CONVERT_BUFFERS); tcharp = bufs[bflag]
SHAR_EOF
chmod 0644 shuffle.h ||
echo 'restore of shuffle.h failed'
Wc_c="`wc -c < 'shuffle.h'`"
test 1637 -eq "$Wc_c" ||
	echo 'shuffle.h: original size 1637, current size' "$Wc_c"
fi
# ============= sysexits.h ==============
if test -f 'sysexits.h' -a X"$1" != X"-c"; then
	echo 'x - skipping sysexits.h (File already exists)'
else
echo 'x - extracting sysexits.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'sysexits.h' &&
/*:ts=4*/
/*****************************************************************************
X * FIDOGATE --- Gateway software UNIX <-> FIDO
X *
X * $Id: sysexits.h,v 1.2 90/12/02 21:22:44 mj Exp $
X *
X * Exit statuses for systems that doesn't have /usr/include/sysexits.h
X *
X * $Log:	sysexits.h,v $
X * Revision 1.2  90/12/02  21:22:44  mj
X * Changed program header to mention both authors of the original
X * software posted to alt.sources.
X * 
X * Revision 1.1  90/11/05  20:51:12  mj
X * Changed my signature in all program headers.
X * 
X * Revision 1.0  90/06/21  19:12:34  mj
X * Initial revision
X * 
X *
X *****************************************************************************
X * This version hacked and maintained by:
X *    _____ _____
X *   |     |___  |   Martin Junius     FIDO:    2:242/6.1   2:242/6.0
X *   | | | |   | |   Republikplatz 3   DOMAIN:  mju@dfv.rwth-aachen.de
X *   |_|_|_|_____|   D-5100 Aachen     Tel. (Voice) 0241-86931
X *
X * Original version of these programs and files:
X *
X *   Teemu Torma
X *   Heikki Suonsivu   FIDO: 2:504/1   UUCP: ...!mcsun!santra!hsu
X *
X *****************************************************************************/
X
#define EX_OK			 0				/* successful termination */
#define EX_USAGE		64				/* command line usage error */
#define EX_DATAERR		65				/* data format error */
#define EX_NOINPUT		66				/* cannot open input */
#define EX_NOHOST		68				/* host name unknown */
#define EX_UNAVAILABLE	69				/* service unavailable */
#define EX_SOFTWARE		70				/* internal software error */
#define EX_OSERR		71				/* system error (e.g., can't fork) */
#define EX_OSFILE		72				/* critical OS file missing */
#define EX_CANTCREAT	73				/* can't create (user) output file */
#define EX_IOERR		74				/* input/output error */
SHAR_EOF
chmod 0644 sysexits.h ||
echo 'restore of sysexits.h failed'
Wc_c="`wc -c < 'sysexits.h'`"
test 1760 -eq "$Wc_c" ||
	echo 'sysexits.h: original size 1760, current size' "$Wc_c"
fi
# ============= nodelist.h ==============
if test -f 'nodelist.h' -a X"$1" != X"-c"; then
	echo 'x - skipping nodelist.h (File already exists)'
else
echo 'x - extracting nodelist.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'nodelist.h' &&
/*:ts=4*/
/*****************************************************************************
X * FIDOGATE --- Gateway software UNIX <-> FIDO
X *
X * $Id: nodelist.h,v 1.2 90/12/02 21:22:18 mj Exp $
X *
X * Structures and definitions for nodelist.
X *
X * $Log:	nodelist.h,v $
X * Revision 1.2  90/12/02  21:22:18  mj
X * Changed program header to mention both authors of the original
X * software posted to alt.sources.
X * 
X * Revision 1.1  90/11/05  20:50:51  mj
X * Changed my signature in all program headers.
X * 
X * Revision 1.0  90/06/21  19:14:27  mj
X * Initial revision
X * 
X *
X *****************************************************************************
X * This version hacked and maintained by:
X *    _____ _____
X *   |     |___  |   Martin Junius     FIDO:    2:242/6.1   2:242/6.0
X *   | | | |   | |   Republikplatz 3   DOMAIN:  mju@dfv.rwth-aachen.de
X *   |_|_|_|_____|   D-5100 Aachen     Tel. (Voice) 0241-86931
X *
X * Original version of these programs and files:
X *
X *   Teemu Torma
X *   Heikki Suonsivu   FIDO: 2:504/1   UUCP: ...!mcsun!santra!hsu
X *
X *****************************************************************************/
X
/* Change these if you wish. */
X
/* Name of nodelist in LIBDIR */
#define NODELIST "nodelist"
X
/* Name of nodelist index file in LIBDIR */
#define INODELIST "nodelist.idx"
X
/* Name of sysop name index file in LIBDIR */
#define NAMELIST "name.idx"
X
/* Compare two node entried to see if they are same node (ignoring
X   possible other information */
#define samenode(n1, n2) ((n1).zone == (n2).zone && (n1).net == (n2).net && \
X              (n1).node == (n2).node && (n1).point == (n2).point)
X
/* Structure for nodelist entry. Routines to get one node from nodelist
X   will return this structure. */
X
typedef struct _node {
X  int type; /* type of entry (see below) */
X  int region; /* region (not necessarily used/set) */
X  int net; /* net/region of node */
X  int zone; /* Zone of node (not really supported yet) */
X  int node; /* number of node */
X  int point; /* Point of node (not really supported yet) */
X  char name[20]; /* name of fido */
X  char city[40]; /* city */
X  char sysop[36]; /* name of sysop */
X  char phone[40]; /* phone-number */
X  int speed; /* speeds */
X  char flags[60]; /* flags-string */
} Node;
X
typedef struct _indexnode {
X  int zone;
X  int net;
X  int node;
X  long offset;
} NODEINDEX;
X
typedef struct _indexname {
X  char name[36]; /* Sysop name */
X  long offset; /* Refers to nodelist index entry */
X  int zone;
X  int net;
} NAMEINDEX;
X
/* Entry types. */
X
#define REGION (1) /* region-host */
#define HOST (2) /* net-host */
#define HUB (3) /* local-host */
#define PVT (4) /* private node */
#define HOLD (5) /* no mail to this node */
#define DOWN (6) /* node is down */
#define KENL (7) /* should not be comminucated */
#define NORMAL (8) /* normal node */
#define ZONE (9) /* Zone */
#define POINT (10) /* point (points are not in nodelist but this is used
X              elsewhere. */
X
/* Declarations for routines. */
X
Node *node_entry(); /* get entry from nodelist */
char *update_index(); /* update index-file */
extern Node *parse_entry();
X
extern Node originnode;
extern NODEINDEX *nodeindex;
extern NAMEINDEX *nameindex;
extern int nodes;
SHAR_EOF
chmod 0644 nodelist.h ||
echo 'restore of nodelist.h failed'
Wc_c="`wc -c < 'nodelist.h'`"
test 3209 -eq "$Wc_c" ||
	echo 'nodelist.h: original size 3209, current size' "$Wc_c"
fi
# ============= fidogate.h ==============
if test -f 'fidogate.h' -a X"$1" != X"-c"; then
	echo 'x - skipping fidogate.h (File already exists)'
else
echo 'x - extracting fidogate.h (Text)'
sed 's/^X//' << 'SHAR_EOF' > 'fidogate.h' &&
/*:ts=4*/
/*****************************************************************************
X * FIDOGATE --- Gateway software UNIX <-> FIDO
X *
X * $Id: fidogate.h,v 1.8 90/12/02 21:21:47 mj Exp $
X *
X * Common header file
X *
X * $Log:	fidogate.h,v $
X * Revision 1.8  90/12/02  21:21:47  mj
X * Changed program header to mention both authors of the original
X * software posted to alt.sources.
X * 
X * Revision 1.7  90/12/01  17:48:52  mj
X * Fixed an extern function declaration of ascnoden().
X * 
X * Revision 1.6  90/11/20  21:08:13  mj
X * Changed some extern definitions.
X * 
X * Revision 1.5  90/11/05  20:49:34  mj
X * Changed my signature in all program headers.
X * 
X * Revision 1.4  90/09/08  18:45:08  mj
X * Added definition of strsaveline() in xalloc.c
X * 
X * Revision 1.3  90/07/01  13:45:19  mj
X * Removed all calls to alloca(). All unsave malloc()'s without
X * checking the returned pointer are now done via xmalloc().
X * Fixed a malloc() error in rmail.
X * 
X * Revision 1.2  90/06/28  22:04:01  mj
X * Much rework of the sources, no more hsu.h and other clean up.
X * rmail improved, now handles special XENIX quirks.
X * 
X * Revision 1.1  90/06/21  21:08:29  mj
X * Everything seems to work, so this delta was made.
X * 
X * Revision 1.0  90/06/21  18:56:20  mj
X * Initial revision
X * 
X *
X *****************************************************************************
X * This version hacked and maintained by:
X *    _____ _____
X *   |     |___  |   Martin Junius     FIDO:    2:242/6.1   2:242/6.0
X *   | | | |   | |   Republikplatz 3   DOMAIN:  mju@dfv.rwth-aachen.de
X *   |_|_|_|_____|   D-5100 Aachen     Tel. (Voice) 0241-86931
X *
X * Original version of these programs and files:
X *
X *   Teemu Torma
X *   Heikki Suonsivu   FIDO: 2:504/1   UUCP: ...!mcsun!santra!hsu
X *
X *****************************************************************************/
X
#include "config.h"
X
/*
X * default level of debug output
X */
#ifndef INIT_VERBOSE
# ifdef DEBUG
#  define INIT_VERBOSE 3 /*20*/
# else
#  define INIT_VERBOSE 0
# endif
#endif
X
X
/*
X * heavy includin' ...
X */
X
/***** System *****/
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <sys/types.h>
#include <time.h>
#include <errno.h>
#ifdef M_XENIX
# include <sys/ndir.h>
# define dirent direct
#else
# include <dirent.h>
#endif
X
/***** Local *****/
#include "packet.h"						/* FIDO mail packet definition */
#include "nodelist.h"					/* nodelist definitions */
#include "sysexits.h"					/* EX_* defines */
X
X
X
/*
X * Config file sections
X */
#define SECT_NETNODE	1				/* Net/node for receiving node */
#define SECT_NG_AREA	2				/* Newsgroup -> area conversions */
#define SECT_HEADERS	3				/* Header-field definitions */
#define SECT_ENDMSG		4				/* Text to be placed at the end of msg */
#define SECT_AREA_NG	5				/* Area -> newsgroup conversions */
X
X
X
/*
X * External functions and variables
X */
X
/***** System *****/
extern char *mktemp(), *getenv();
extern long time();
extern unsigned short getuid();
extern unsigned short geteuid();
extern unsigned short getgid();
extern unsigned short getegid();
X
/***** errno *****/
extern int errno;
extern char *strerror();
X
X
X
/*
X * Defines
X */
#define TRUE	1
#define FALSE	0
#define BUFLEN 256
#define OK		0
#define ERROR	(-1)
X
#define bool	int
X
/* Global variables. */
X
extern bool verbose;
extern int line;
extern int receiving_data;
X
/* Function declarations. */
X
/* address.c */
extern char *parse_address();
extern int returnbad();
extern int parseinternode();
extern int parsefnetaddress();
extern char *ascnode();
extern char *ascnoden();
extern char *internode();
extern char *ascnodei();
X
extern int fine_convert();
extern char *ascii_convert();
extern int stricmp();
extern int strnicmp();
extern time_t getdate();
extern void flush();
extern void sendline();
extern char *getcl();
extern void section();
extern void log();
extern void debug();
extern int lock();
extern int unlock();
extern char *spoolfile();
extern int quit();
extern char *basename();
extern FILE *pfopen();
extern char *date();
extern long job_number();
extern long sequencer();
extern char *mheader();
X
/* sprintfs.c */
extern char *sstrcat(), *sprintfs();
X
/* strempty.c */
extern char *strclean(), *strsclean();
X
/* xalloc.c */
extern char *xmalloc(), *xrealloc(), *strsave(), *strsaveline();
SHAR_EOF
chmod 0644 fidogate.h ||
echo 'restore of fidogate.h failed'
Wc_c="`wc -c < 'fidogate.h'`"
test 4281 -eq "$Wc_c" ||
	echo 'fidogate.h: original size 4281, current size' "$Wc_c"
fi
true || echo 'restore of rfmail.c failed'
echo End of part 2, continue with part 3
exit 0

--
 _____ _____
|     |___  |   Martin Junius     FIDO:    2:242/6.1   2:242/6.0
| | | |   | |   Republikplatz 3   DOMAIN:  mju@dfv.rwth-aachen.de
|_|_|_|_____|   D-5100 Aachen     Tel. (Voice) 0241-86931