2 # NEWT, their six-year-old daughter, yells from the back...
15 newtname=newt@dont-email.me
19 echo Newsgroups: `{echo $group | sed 's/\//\./g'}
20 echo Subject: $"subject
23 eval $editor /tmp/post
26 cat /tmp/post >$mnt/$group/post
28 fn f { du -a $* | sed 's/^.* //g' }
31 if(! ~ $date(1) [0-9]*)
50 if(! ~ $date(3) `{date | awk '{print $6;}'})
53 ti=`{echo $date(4) | awk '{print substr($0,0,5);}'}
54 if(! ~ $#mo 0 && ! ~ $#da 0 && ! ~ $#ti 0)
61 from=`{awk -F ' ' '{print $3;}' $rposts($i)^/xover >[2]/dev/null}
62 if(! ~ $#from 0 && ! ~ $#from 1){
66 echo $i | sed 's/(<|>)//g'
74 date=`{awk -F ' ' '{print $4;}' $rposts($i)^/xover >[2]/dev/null | fmtd}
77 subject=`{awk -F ' ' '{print substr($2,0,50);}' $rposts($i)^/xover >[2]/dev/null}
80 # unicode 00a0 divides message number from headline.
81 # command input ignores everything after unicode 00a0.
82 # these lines may be selected and sent to the prompt.
83 echo ' '$"i' '$"date' '$"from' '$"subject
86 fn getposts{ ls | grep -e '^[0-9]+$' | sort -n | tail -$maxposts }
90 case ,*; seq 1 `{echo $* | sed 's/,//g'}
91 case *,; seq `{echo $* | sed 's/,//g'} $posts($#posts)
92 case *,*; seq `{echo $* | sed 's/,/ /g'}
96 fn h{ sed -n $1^p /tmp/h }
98 kmnt=`{echo $mnt | sed 's/\//\\\//g'}
100 grep -v -e '\/([0-9]+|article|body|header|post|xover)$' |
101 sed 's/^'$"kmnt'\// g /g' |
105 fn nshift{ shift; echo $* }
107 echo 'Commands are of the form [<range>] <command> [args]
108 <range> := <addr> | <addr>','<addr>
110 b print the next ten headers
112 g ... go to specified group
113 h print message headline (,h for all)
114 help print this help message
115 k ... list sub-groups under specified group
116 kf ... grep $home/lib/newsgroups for regexp
117 p print message with minimal headers
118 P print message with full headers
121 y synchronize message list with server
122 " print message in quoted form, suitable for reply
123 |cmd pipe message body to a command
124 ||cmd pipe raw message to a command
126 ? print debug information'
129 if(test $1 -le $#rposts && test -f $mnt/$group/$rposts($1)^/body){
131 grep -e '(^From|^Newsgroups|^Subject|^Date)' $rposts($1)^/header
133 cat $rposts($1)^/body
144 if(test $1 -le $#rposts && test -f $mnt/$group/$rposts($1)^/article)
145 eval $pager $rposts($1)^/article
153 if(test $1 -le $#rposts && test -f $mnt/$group/$rposts($1)^/header){
154 subject=`{grep -e '^Subject: ' $mnt/$group/$rposts($1)^/header | sed 's/^Subject: //g'}
155 if(! ~ $subject RE:* Re:* re:*)
156 subject=(Re: $subject)
160 echo !message missing
167 posts=`{seq 1 $#rposts}
171 echo $#posts messages
176 echo -n $* ' (y, n) '
185 fn '"' {{p $1 | sed 1d | sed 's/^/> /g' | sed 's/^> >/>>/g' | sed '$d'; echo}}
187 echo usage: $argv0 '[ -f newsgroup ] [ -m mountpoint ] [ -p maxposts ]' >[1=2]
193 group=`{echo $2 | sed 's/\./\//g'}
209 if(! test -d $mnt/$group){
210 echo !$mnt/$group does not exist >[1=2]
213 builtin cd $mnt/$group
217 # command input ignores everything after unicode 00a0.
218 rcmd=`{read | sed 's/[ ].*$//g' | sed 's/^([0-9]+)?(,)?([0-9]+)?/& /g'}
231 r=`{seq $r(1) `{echo $r(1)^+10|bc}}
232 if(test $r($#r) -gt $posts($#posts))
233 r=`{seq $r(1) $posts($#posts)}
234 if(! ~ $#r 0 && test $r(1) -le $posts($#posts)){
235 sed -n $r(1)^,$r($#r)^p /tmp/h
244 ngroup=`{nshift $cmd | sed 's/\./\//g'}
245 if(test -d $mnt/$ngroup){
246 if(grep -s -e '^[0-9]+$' <{ls -p $mnt/$ngroup}){
248 builtin cd $mnt/$group
252 echo !$ngroup contains no messages
255 echo !$ngroup does not exist
268 k `{nshift $cmd | sed 's/\./\//g'}
270 grep -e `{nshift $cmd} $home/lib/newsgroups |
295 cmd=`{echo $"cmd | sed 's/^\|\|//g'}
296 cat $mnt/$group/^$rposts($post)^/article | eval $cmd
298 cmd=`{echo $"cmd | sed 's/^\|//g'}
299 cat $mnt/$group/^$rposts($post)^/body | eval $cmd
301 eval `{echo $"cmd | sed 's/^\!//g'}
307 echo maxposts: $maxposts
310 echo 'rposts(r):' $rposts($r)
315 if(~ $post $posts(1) && ~ $#go 0)
317 if not if(! ~ $post $posts($#posts)){
318 post=`{echo $post^+1 | bc}
319 if(test $post -gt $posts($#posts))