v08i046: bsnews 1.2 update package
Brandon S. Allbery - comp.sources.misc
allbery at uunet.UU.NET
Sun Sep 24 07:02:24 AEST 1989
Posting-number: Volume 8, Issue 46
Submitted-by: ron at mlfarm.UUCP (Ronald Florence)
Archive-name: bsnews.p1
Since posting the original bsnews 1.1 (Bootstrap News) package, I have
received a number of requests for a version of "rnews.c" which can be
compiled under DOS. I have also added the option of command line
arguments for installations where rnews is invoked from a script
instead of by "uux", and a provision for output to stdout instead of a
spool file. The Makefile entry for "rnews.exe" and some of the
defines in "rnews.c" may require tailoring to fit different DOS C
compilers.
The shar package includes a simple but useful patch to the "pn" news
poster which was suggested by Bill Davidsen (davidsen at crdos1).
__________________________________________________________
#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
# Makefile
# rnews.c
# pn.proto.patch
# This archive created: Tue Sep 19 09:37:59 1989
# By: Ronald Florence (Maple Lawn Farm, Stonington, CT)
export PATH; PATH=/bin:/usr/bin:$PATH
echo shar: "extracting 'Makefile'" '(2026 characters)'
if test -f 'Makefile'
then
echo shar: "will not over-write existing file 'Makefile'"
else
sed 's/^X//' << \SHAR_EOF > 'Makefile'
X# Makefile for bootstrap news
X# copyright 1989 Ronald Florence (ron at mlfarm, 9/16/89)
X#
X# To build bootstrap news:
X# 1. Change READER to your favorite mail reader with the option flag
X# used to specify a spool file.
X# 2. Change HOST to the name of your news feed. If you get news
X# from more than one host, select the one to which you feed news,
X# and change FEEDER to something like Usenet_news.
X# 3. Run make.
X#
X
XREADER = Mail -f
XHOST = mlfarm
XFEEDER = news@$(HOST).UUCP
X
XSPOOL = /usr/spool/news
XNEWSSPOOL = $(SPOOL)/bsnews
XNEWSDIR = /usr/lib/news
XSEQFILE = $(NEWSDIR)/seq
XBINDIR = /usr/bin
XCOMPRESS = $(BINDIR)/compress
XCFLAGS = -O -s -DFeeder='"$(FEEDER)"' -DNewsspool='"$(NEWSSPOOL)"'
XPGMS = uurec pn checknews rnews readnews
XFILES = spoolfile seqfile
XSRCS = checknews.c rnews.c uurec.proto pn.proto readnews.proto
XSHELL = /bin/sh
X
Xbsnews: install
X
Xinstall: $(PGMS) $(FILES)
X cp $(PGMS) $(BINDIR)
X cd $(BINDIR)
X chgrp bin $(PGMS)
X chown bin $(PGMS)
X @echo
X @echo "Add \"rnews\" to /usr/lib/uucp/L.cmds or the equivalent for a"
X @echo "uux feed. For a mail feed, create a sendmail alias for rnews:"
X @echo "|/usr/bin/uurec or run \"uurec\" periodically from cron with"
X @echo "/usr/spool/mail/rnews as input."
X @ [ -x $(COMPRESS) ] || { echo "You need $(COMPRESS) for compressed feeds."; }
X
Xspoolfile:
X [ -d $(SPOOL) ] || mkdir $(SPOOL)
X [ -f $(NEWSSPOOL) ] || > $(NEWSSPOOL)
X chmod 666 $(NEWSSPOOL)
X
Xseqfile:
X [ -f $(SEQFILE) ] || { mkdir $(NEWSDIR); echo "1" > $(SEQFILE); }
X chmod 666 $(SEQFILE)
X
Xuurec: uurec.proto
X sed "s|/usr/spool/news/bsnews|$(NEWSSPOOL)|" uurec.proto > uurec
X chmod +x uurec
X
Xpn: pn.proto
X sed "s/BigNode/$(HOST)/" pn.proto > pn
X chmod +x pn
X
Xreadnews: readnews.proto
X sed "s|Mail -f /usr/spool/news/bsnews|$(READER) $(NEWSSPOOL)|" readnews.proto > readnews
X chmod +x readnews
X
Xshar: Readme Makefile $(SRCS)
X shar -a Readme Makefile $(SRCS) > bsnews.shar
X
Xclean:
X rm -f $(PGMS)
X
Xrnews.exe: rnews.c
X cc -dos -DDOS -DFeeder='"$(FEEDER)"' rnews.c -o rnews.exe
X
SHAR_EOF
if test 2026 -ne "`wc -c < 'Makefile'`"
then
echo shar: "error transmitting 'Makefile'" '(should have been 2026 characters)'
fi
fi
echo shar: "extracting 'rnews.c'" '(2498 characters)'
if test -f 'rnews.c'
then
echo shar: "will not over-write existing file 'rnews.c'"
else
sed 's/^X//' << \SHAR_EOF > 'rnews.c'
X/*
X * rnews.c
X * copyright 1989 Ronald Florence (ron at mlfarm 8/14/89)
X *
X * modified for DOS (ron at mlfarm, 9/16/89)
X */
X
X#include <stdio.h>
X#include <time.h>
X
X#ifndef Feeder
X#define Feeder "Usenet"
X#endif
X
X#ifndef DOS
X#define Readmode "r"
X#define Compress "/usr/bin/compress -dc > %s"
Xchar *mktemp();
X#else
X#include <fcntl.h>
X#define Readmode "rb"
X#define Compress "compress -d %s"
X#endif
X
X#define bye(s) perror(s), exit(1)
X
Xlong time();
XFILE *nf, *cf;
X
Xmain(argc, argv)
X int argc;
X char *argv[];
X{
X int i;
X
X#ifndef Newsspool
X nf = stdout;
X#else
X if (!(nf = fopen(Newsspool, "a")))
X bye(Newsspool);
X#endif
X if (argc > 1)
X for (i = 1; i < argc; i++)
X {
X if ((cf = freopen(argv[i], Readmode, stdin)) == NULL)
X bye(argv[i]);
X parse();
X }
X else
X {
X#ifdef DOS
X setmode(fileno(stdin), O_BINARY);
X#endif
X parse();
X }
X}
X
X
Xparse()
X{
X register c;
X int new = 1, n;
X char buf[BUFSIZ], dcomp[40], tmpnews[20];
X
X while (fgets(buf, BUFSIZ, stdin) != NULL)
X {
X /* batched? */
X if (!strncmp(buf, "#! ", 3))
X {
X /* compressed? */
X if (!strncmp(buf+3, "cunbatch", 8))
X {
X#ifndef DOS
X sprintf(tmpnews, mktemp("newsart.XXXXXX"));
X sprintf(dcomp, Compress, tmpnews);
X if (!(cf = popen(dcomp, "w")))
X bye(dcomp);
X#else
X sprintf(tmpnews, "%08.8lX.Z", time());
X if (!(cf = fopen(tmpnews, "wb")))
X bye(tmpnews);
X#endif
X while ((c = getchar()) != EOF)
X putc(c, cf);
X#ifndef DOS
X pclose(cf);
X#else
X fclose(cf);
X tmpnews[8] = '\0';
X sprintf(dcomp, Compress, tmpnews);
X if (system(dcomp))
X bye(dcomp);
X#endif
X if ((cf = freopen(tmpnews, Readmode, stdin)) == NULL)
X bye(tmpnews);
X /* and loop around to unbatch */
X continue;
X }
X /* unpack the batch */
X else if (sscanf(buf+3, "rnews %d", &n) == 1)
X {
X timestamp(nf);
X for (c = 0; c < n; c += strlen(buf))
X {
X if (fgets(buf, BUFSIZ, stdin) == NULL)
X break;
X if (!strncmp(buf, "From ", 5))
X putc('>', nf);
X fputs(buf, nf);
X }
X putc('\n', nf);
X continue;
X }
X }
X /* it must be unbatched */
X else
X {
X if (new)
X {
X timestamp(nf);
X new = 0;
X }
X if (!strncmp(buf, "From ", 5))
X putc('>', nf);
X fputs(buf, nf);
X }
X }
X if (!new)
X putc('\n', nf);
X unlink(tmpnews);
X}
X
X
Xtimestamp(newsfile)
XFILE *newsfile;
X{
X long clock;
X char *ctime();
X
X time(&clock);
X fprintf(newsfile, "From %s %s", Feeder, ctime(&clock));
X}
SHAR_EOF
if test 2498 -ne "`wc -c < 'rnews.c'`"
then
echo shar: "error transmitting 'rnews.c'" '(should have been 2498 characters)'
fi
fi
echo shar: "extracting 'pn.proto.patch'" '(45 characters)'
if test -f 'pn.proto.patch'
then
echo shar: "will not over-write existing file 'pn.proto.patch'"
else
sed 's/^X//' << \SHAR_EOF > 'pn.proto.patch'
X18c18
X< read Subject rest
X---
X> read Subject
SHAR_EOF
if test 45 -ne "`wc -c < 'pn.proto.patch'`"
then
echo shar: "error transmitting 'pn.proto.patch'" '(should have been 45 characters)'
fi
fi
exit 0
# End of shell archive
--
Ronald Florence ...{hsi,rayssd}!mlfarm!ron
More information about the Comp.sources.misc
mailing list