2 # bloated, featureful usenet reader for use with nntpfs
12 newtname=newt@dont-email.me
16 echo Newsgroups: `{echo $group | sed 's/\//\./g'}
17 echo Subject: $"subject
20 eval $editor /tmp/post
21 cat /tmp/post >$mnt/$group/post
23 fn f { du -a $* | sed 's/^.* //g' }
26 if(! ~ $date(1) [0-9]*)
45 if(! ~ $date(3) `{date | awk '{print $6;}'})
48 ti=`{echo $date(4) | awk '{print substr($0,0,5);}'}
53 from=`{awk -F ' ' '{print $3;}' $i/xover}
54 if(! ~ $#from 0 && ! ~ $#from 1){
58 echo $i | sed 's/(<|>)//g'
65 date=`{awk -F ' ' '{print $4;}' $i/xover >[2]/dev/null | fmtd}
66 awk -v date'='$"date -v from'='$from(1) -F ' ' \
67 '{print " " $1 " " date " " from " " substr($2,0,50);}' $i/xover >[2]/dev/null
70 echo ' '$"i' nil nil nil'
73 fn getposts{ ls | grep -e '^[0-9]+$' | sort -n | tail -$maxposts }
75 kmnt=`{echo $mnt | sed 's/\//\\\//g'}
77 grep -v -e '\/([0-9]+|article|body|header|post|xover)$' |
78 sed 's/^'$"kmnt'\// g /g' |
81 fn nshift{ shift; echo $* }
83 echo '[0-9]+ print specified message
86 f jump to first message
87 g ... go to specified group
88 h print message headlines
89 help print this help message
90 k ... list sub-groups under specified group
91 l jump to last message
93 p print message with minimal headers
94 P print message with full headers
97 y synchronize message list with server
98 " print message in quoted form, suitable for reply
99 |cmd pipe message body to a command
100 ||cmd pipe raw message to a command
101 ? print debug information'
104 if(test -d $mnt/$group/$1){
105 grep -e '(^From|^Newsgroups|^Subject|^Date)' $1/header
113 if(test -d $mnt/$group/$1){
120 echo usage: $argv0 '[ -f newsgroup ] [ -m mountpoint ] [ -p maxposts ]' >[1=2]
126 group=`{echo $2 | sed 's/\./\//g'}
142 if(! test -d $mnt/$group){
143 echo !$mnt/$group does not exist >[1=2]
146 builtin cd $mnt/$group
151 echo $#posts messages
157 if(grep -s -e '^[0-9]+$' <{echo $cmd(1)}){
162 if(! ~ $post $posts(1)){
163 post=`{echo $post^-1 | bc}
172 ngroup=`{nshift $cmd | sed 's/\./\//g'}
173 if(test -d $mnt/$ngroup){
174 if(grep -s -e '^[0-9]+$' <{ls -p $mnt/$ngroup}){
176 builtin cd $mnt/$group
182 echo $#posts messages
185 echo !$ngroup contains no messages
188 echo !$ngroup does not exist
196 k `{nshift $cmd | sed 's/\./\//g'}
213 if(test -f $mnt/$group/$post/header){
214 subject='Re: '^`{grep -e '^Subject: ' $mnt/$group/$post/header | sed 's/^Subject: //g'}
218 echo !message missing
222 echo $#posts messages
224 printp $post | sed 1d | sed 's/^/> /g' | sed 's/^> >/>>/g'
226 cmd=`{echo $"cmd | sed 's/^\|\|//g'}
227 cat $mnt/$group/$post/article | eval $cmd
229 cmd=`{echo $"cmd | sed 's/^\|//g'}
230 cat $mnt/$group/$post/body | eval $cmd
234 echo maxposts: $maxposts
238 if(~ $post $posts(1) && ~ $#go 0){
242 if not if(! ~ $post $posts($#posts)){
244 post=`{echo $post^+1 | bc}
245 if(test $post -gt $posts($#posts))