Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10.2 9/5/84; site sunybcs.UUCP Path: utzoo!watmath!sunybcs!colonel From: colonel@sunybcs.UUCP (Col. G. L. Sicherman) Newsgroups: net.sources Subject: prnews Message-ID: <2696@sunybcs.UUCP> Date: Fri, 3-Jan-86 10:32:42 EST Article-I.D.: sunybcs.2696 Posted: Fri Jan 3 10:32:42 1986 Date-Received: Sat, 4-Jan-86 06:04:55 EST Distribution: net Organization: Travelers' Advisory Lines: 260 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@buffalo-cs BI: csdsicher@sunyabva