prnews
Col. G. L. Sicherman
colonel at sunybcs.UUCP
Sat Jan 4 01:32:42 AEST 1986
Do you ever get tired of sitting at the terminal and hitting the space
bar? Well, you should. You look silly doing it. The following script
saves you the trouble by _printing_ the news. If you have troff or
ditroff, it will print in columns in 8-point Roman condensed, so you
can pretend you're reading the New York Herald-Tribune. It will even
unrot jokes that need it, if you have a suitable rot-detector.
Warnings: it's klugy. You'll probably have to tweak it. And don't start
it with the -uu option and then read news interactively; you'll clobber
your .newsrc. And syshats hate it because it's a hog.
I think you'll like it.
------- DETACH CAREFULLY ALONG THIS LINE ----------------------------
: prnews [options] newsgroup ...
: print all articles in one or more newsgroups
:
: -y print with DITROFF, in columns
: -u print only unread articles
: -uu print only unread articles, mark articles read in .newsrc
: debugging options:
: -d divert to standard output
: -t divert DITROFF output to standard output
::::::::::::::::
: ISROT=false
ISROT=/cs/staff/colonel/bin/isrot
TMP=/usr/tmp
NNSED=$TMP/prn$$n
NNTMP=$TMP/prn$$x
NUNU=$TMP/prn$$u
GREPT=$TMP/prn$$g
SED2=$TMP/prn$$s
AWK2=$TMP/prn$$a
PRINP=$TMP/prn$$i
trap "rm -f $TMP/prn$$? ; exit" 0 1 2 13 15
while
test "$*"
do
case $1 in
-y) YFLAG=YFLAG; shift;;
-uu) UUFLAG=UUFLAG; UFLAG=UFLAG; shift;;
-u) UFLAG=UFLAG; shift;;
-d) DFLAG=DFLAG; shift;;
-t) TFLAG=TFLAG; shift;;
-) echo "$0: bad switch $1" >&2;exit;;
*) break;;
esac
done
: set up 2 sed scripts and 1 awk script.
cat << \NNSED > $NNSED
s/^[^ ]* /,/
s/$/,/
s/,\([0-9][0-9]*\),/,\1-\1,/g
s/\([0-9][0-9]*\)-\([0-9][0-9]*\)/\1 l\
\2 u/g
s/^,//
s/,$//
s/,/\
/g
NNSED
cat << \XSED >$SED2
s/[ ][ ]*/ /g
s/[ ][ ]*$//
s/\\/&e/g
s/====*/==/g
s/\~\~\~\~*/\~\~/g
s/<><>[<>]*/<>/g
s/___*/__/g
s/|/|\\|/g
s/->/\\(&/g
s/<-/\\(&/g
s/---*/\\(em/g
s/- - [- ]*-/\\-/g
s/-/\\-/g
s/\([ ([]\)"/\1``/g
s/^"/``/
s/ '\([^ ]\)/ `\1/g
s/ '/ \\'/g
s/^'/\\'/
s/"/''/g
s/^\./\\\&./
s/^Subject: \(.*\)$/.SU "\1"/
s/^From: \(.*\)$/.FR "\1"/
s/^Date: \(.*\)$/.DA "\1"/
XSED
cat << \XAWK >$AWK2
$1=="**********" {body=0; slash=index($2,"/"); g=substr($2,1,slash-1);
if (g!=g0) print ".NG",g; g0=g; print ".NA",substr($2,slash+1);next}
length($1)>20 {print substr($1,1,20),"\&" substr($1,21,40),substr($1,41);
for (i=2; i<=NF; i++) print $i; next}
/^\./ {print; next}
/^[ ]*$/ {if (body++) print ".sp .6"; else print ".HE"; next}
body<1 {next}
{print}
XAWK
: now print some NEWS!
if test "$UUFLAG"
then
cp /dev/null $NUNU
fi
if test "$YFLAG"
then
cat << \XFORMAT >$PRINP
.\" font for news text
.ds NF RC
.nr PO 0.5i
.nr TM 0.5i
.po \n(POu
.ll 1.7i
.ps 8
.vs 1.1m
.de tm \" top margin
'sp |\\n(TMu
.nr co 0 1 \" which column
..
.de en \" end-macro
.\" remove yo-yo trap
. wh -.6i
. wh -.6i pn
..
.de pn \" page-number
. if \\n(co<1 \{\
' sp 1
. tl '''\fBPage %\fP' \}
..
.em en
.de bm \" bot margin
. pn
. ie \\n+(co<4 \{\
. po +1.9i
' sp |\\n(TMu
. ns \}
. el \{\
. po \\n(POu
' bp \}
..
.wh -.6i bm
.de NG
. ce 3
\l'1.5i'
.ft B
\\$1
.ft \*(NF
. sp -.5
\l'1.5i'
..
.de NA
.ds N@ \l'1.5i-\w'\fB\\$1\f\*(NF'u/2u'
.ce 1
.ft B
\u\\*(N@\d\\$1\u\\*(N@\d
.ft \*(NF
..
.\" SU - subject line(s)
.de SU
. ds S@ "\\$1
..
.\" DA - date
.de DA
. ds D@ "\\$1
..
.\" FR - from whom
.de FR
. ds F@ "\\$1
..
.\" HE - dump heading
.de HE
. ft B
\\*(S@
. ft R
. br
\\*(D@
. br
. ft I
\\*(F@:
. ft \*(NF
. br
..
.wh 0 tm
XFORMAT
fi
for i
do
d=/usr/spool/news/`echo $i | tr . /`
if test ! -d $d
then
echo "prnews: $i not found" >&2
continue
fi
cd $d
if test "$UFLAG"
then
grep "^$i[:!]" $HOME/.newsrc | sed -f $NNSED > $NNTMP
range=`ls -F | grep -v '[*/]' | sed -e 's/$/ n/' \
| sort -n $NNTMP - | awk '$2!="n"{x=$2;next} x=="u"{print $1}'`
else
range=`ls -F | grep -v '[*/]' | sort -n`
fi
for j in $range
do
last=$j
echo '**********' $i/$j '**********'
if test $i = net.jokes && $ISROT $j
then
tr A-Za-z N-ZA-Mn-za-m
else
cat
fi < $j
done
:
: build new .newsrc records.
:
if test "$UUFLAG"
then
cat -n $HOME/.newsrc |\
if grep " $i[:!]" > $GREPT
then
awk '{printf "n %s\t%s", $1, $2}' < $GREPT >> $NUNU
else
echo -n n "0 $i:" >> $NUNU
fi
echo " 1-$last" >> $NUNU
fi
done | if test "$YFLAG"
then
sed -f $SED2
else
cat
fi | if test "$YFLAG"
then
awk -f $AWK2
else
cat
fi >> $PRINP
if test "$UUFLAG"
then
cp $HOME/.newsrc $HOME/.newsrc.bak
cat -n $HOME/.newsrc.bak | \
sed -e 's/^/o /' | sort +1n -2 +0 -1 +2 -3 $NUNU - | \
sort -um +2 -3 | sed 's/^[^ ]* //' > $HOME/.newsrc
fi &
if test "$DFLAG"
then
cat $PRINP
elif test "$YFLAG"
then
if test "$TFLAG"
then
ditroff -t $PRINP
else
ditroff $PRINP
fi
else
lpr $PRINP
fi
--
Col. G. L. Sicherman
UU: ...{rocksvax|decvax}!sunybcs!colonel
CS: colonel at buffalo-cs
BI: csdsicher at sunyabva
More information about the Comp.sources.unix
mailing list