home *** CD-ROM | disk | FTP | other *** search
- #! /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>@}>()=
- . ${NEWSCONFIG-/var/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
-