#! /bin/sh # pnews [prefix] - prepare user's article on stdin for posting via relaynews # prefix is for tear; if given, output will also be in # ${prefix}hdr & ${prefix}body # =()<. ${NEWSCONFIG-@@}>()= . ${NEWSCONFIG-/usr/local/lib/news/bin/config} export NEWSCTL NEWSBIN NEWSARTS NEWSPATH NEWSUMASK NEWSMASTER NEWSCONFIG PATH=$NEWSCTL/bin:$NEWSBIN/inject:$NEWSBIN:$NEWSPATH; export PATH prefix=/tmp/pn$$ # default prefix hdrs=/tmp/pn$$hdrs # 1036-conformant headers rmlist="$inhdrs $inbody $hdrs" # remove hdr & body files by default umask $NEWSUMASK # argument procesing case $# in 0) ;; 1) prefix="$1" rmlist="$hdrs" # only remove scratch file(s) ;; *) echo "usage: $0 [prefix]" >&2 exit 1 ;; esac inhdrs=${prefix}hdr # generated by tear: headers inbody=${prefix}body # generated by tear: body tear $prefix # output in $inhdrs and $inbody ** takes 0.4 seconds # generate new headers and bash old headers ** takes 2.1 seconds # touch up headers & rewrite dates to make them 1036-compliant. # canonicalise header keyword capitalisation; # greps for Control: and Approved: later assume this, as does defhdrs.awk, # so $inhdrs needs to stick around and be canonicalised. if canonhdr -dm <$inhdrs >$hdrs; then # dredge up defaults ** takes 0.1 secs # get time & pid from the server me="` hostname `" server="` cat $NEWSCTL/server 2>/dev/null `" case "$server" in "") server="$me" ;; # if no server file, assume this is it esac case "$me" in $server) args= ;; *) args="` (echo PATH=$PATH echo 'echo -p $$ -t' echo getdate now) | rsh $server /bin/sh `" ;; esac # POLICY: msgid format; usg gcos? # tailor: add -u for USG GCOS fields eval ` defaults $args ` # sets def* variables case "$defname" in "") fullname="" ;; # no full name, leave it off *) fullname=" ($defname)" ;; esac # badsites="pucc.bitnet!" # tailor, syntax is "host1!host2!...host3!" awk -f $NEWSBIN/inject/defhdrs.awk \ defpath="$badsites$defuser" \ deffrom="$defuser@$defmailname$fullname" deforg="$deforg" \ defmsgid="$defmsgid" me="$defhostname" $hdrs >$inhdrs status=$? else status=$? # shouldn't be needed, but some major shells get it wrong fi # pad zero-line articles, since old B [ir]news are confused by them # and the news readers generate zero-line control messages, alas. if test ! -s $inbody; then (echo ''; echo This article was probably generated by a buggy news reader.) \ >$inbody fi # output begins here ( # POLICY: don't generate Lines: because it is optional, munged in transit # by B News to make the count incorrect, and not pulling its weight. # If you just *have* to generate Lines: headers, uncomment line A and comment # out line B. # . lines # NB: reads $inbody # line A firstline="` sed 1q $inbody `" # line B case "$firstline" in # line B '') cat $inhdrs $inbody ;; # emit the article # line B *) echo | cat $inhdrs - $inbody ;; # insert blank line # line B esac # line B if test -r $HOME/.signature; then # POLICY: chop .sigs at 4 lines echo "-- "; sed 4q $HOME/.signature # glue on first bit of signature fi ) | stripinvis rm -f $rmlist exit $status