1 #!/u/bin/bish -p
2
3 Hosts='
4 pop.t-online.de . "."^M
5 pop.t-online.de x "."^M
6 '"$KUNDENSERVER"'^M
7 pop.gmx.net . "."^M
8 pop.gmx.net u "."^M
9 '
10 Cols=090
11
12
13 Help='^M
14 I holt nur die Anzahl und ByteSumme^M
15 i holt die komplette Info-Liste^M
16 ^M
17 Versteckte Menü-Punkte:^M
18 help^M
19 H host (pop.t-online.de)^M
20 H ? {Host-Liste; siehe Hosts='' im Script}^M
21 H n {Selektiert Host/User/Pass n}^M
22 U user (.)^M
23 P pass (.)^M
24 q quiet^M
25 B bodylines (0)^M
26 C columns (80)^M
27 All^M
28 ed (Unix:vi, Win:notepad)^M
29 (Voreinstellungen)^M
30 '
31
32 [ $# -eq 1 ] &&
33 expr "$1" :: '[?/]' &|
34 expr "$1" :: '^-[hH]' && {
35 echo " pop.bish^M
36 pop.bish Host^M
37 pop.bish Host User^M
38 pop.bish Host User 'Password'^M
39 $Help"
40 exit
41 }
42
43 set -f
44
45 set Z:.1200
46 set Subj:.512
47 set From:.512
48 #Tmp=/tmp/bish_pop3
49 mktemp Tmp
50 echo "$Tmp"
51 Nmax=00000
52 Body=' '
53 Q=1
54 Trans=0000000
55 Size=0000000000
56
57 [ $# -gt 0 -a "$1" != '-a' ] && Host="$1" shift
58 [ $# -gt 0 -a "$1" != '-a' ] && User="$2" shift
59 [ $# -gt 0 -a "$1" != '-a' ] && Pass="$3" shift
60 ifset Host || Host="pop.t-online.de"
61 ifset User || User=.
62 ifset Pass || Pass=.
63
64
65 # hostname
66 Hostaddr() {
67 IP="???.???.???.???"
68 [ $# -ne 1 ] && return 1
69 hostaddr "$1" | {
70 [ $? -ne 0 ] && return 2
71 while readl Z
72 do
73 [ Q -eq 0 ] && catv Z /%j
74 expr "$Z" :IP '^addr: %([0-9.]%{7,15}%)' && break
75 done
76 }
77 expr "$IP" :: '^[0-9.]%{7,15}$' || return 3
78 return 0
79 }
80 Hostaddr $Host || { print -u2 "'$Host'?!"; exit 1; }
81
82
83 # ? | n
84 Hosts() {
85 local n=000
86 catv Hosts | {
87 while readl Z
88 do
89 expr "$Z" :: '[a-zA-Z0-9.-]%{4,}' || continue
90 let ++n
91 [ "$1" == '?' ] && { catv /%t n '.: ' Z /%j; continue; }
92 let "$1!=n" && continue
93 expr "$Z" :Host '%([^ %t]%{4,}%)' || break
94 expr "$Z" :User '[^ %t]%{4,}[ %t]%{1,}%([^ %t]%{1,}%)' || break
95 expr "$Z" :Pass '[ %t]"%(.%{1,}%)"[ %t]*$'
96 break
97 done
98 }
99 return 0
100 }
101
102
103 #file n id
104 #Zapp() {
105 # local n=0000
106 # cat $1 | {
107 # > $1
108 # while readl Z
109 # do
110 # expr "$Z" :n '%([0-9]%{1,}%)' || { catv Z /%n; continue; }
111 # let "n!=$2" && { catv Z /%n; continue; }
112 # catv Z ". $3" /%n
113 # done
114 # ><
115 # }
116 # return 0
117 #}
118
119
120 # [-s]
121 Holen() {
122 local c=unknown n=00000 m=- t:9.1
123 Trans=0
124 3> "$Tmp"
125 pop3 $1 $Body $IP "$User" "$Pass" | {
126 while readl Z
127 do
128 #ifset Z && conv '-d^M' Z
129 let "Trans+=${#Z}+2"
130 [ Q -eq 0 ] && catv $Cols,Z /%j
131 case "$Z" in
132 QUIT|STAT|LIST|UIDL)
133 c="$Z" conv -l c; continue;;
134 TOP% [0-9]*) c=topn m=- expr "$Z" :n '%([0-9]%{1,}%)'
135 [ Q -gt 0 ] && let 'n%25==0' && prints su2s6s- T "$n" "^M"
136 continue;;
137 esac
138 case "$c" in
139 stat) expr "$Z" :Nmax '%([0-9]%{1,}%) *[0-9]%{1,}'
140 expr "$Z" :Size '[0-9]%{1,} *%([0-9]%{1,}%)' ;;
141 list) expr "$Z" :n '^ *%([0-9]%{1,}%) *[0-9]%{1,} *$' ||
142 continue
143 [ n -le 0 ] && continue
144 [ Q -gt 0 ] && let 'n%25==0' && prints su2s6s- L "$n" "^M"
145 prints vs-20s-75s-2s-520s-520 Z "$Z" '' - '' ''
146 catv Z /%r%n =$(([n-1]*[20+75+2+520+520+2])),,3
147 continue
148 ;;
149 uidl) expr "$Z" :n '^ *%([0-9]%{1,}%) *[!-~]%{1,} *$' ||
150 continue
151 [ n -le 0 ] && continue
152 expr "$Z" :Z '^ *[0-9]%{1,} *%([!-~]%{1,}%) *$'
153 [ Q -gt 0 ] && let 'n%25==0' && prints su2s6s- U "$n" "^M"
154 prints vs-75 Z "$Z"
155 catv Z =$(([n-1]*[20+75+2+520+520+2]+20)),,3
156 continue
157 ;;
158 topn) expr "$Z" =:Subj '^Subject: %(.*%)$' && continue
159 expr "$Z" =:From '^From: %(..*%)$' && continue
160 expr "$Z" =:: '^Content-Type: text/plain' && m=t continue
161 expr "$Z" =:: '^Content-Type: text/html' && m=H continue
162 expr "$Z" =:: '^Content-Type: multipart/' && m=M continue
163 expr "$Z" :: '^.$' && { c=ende
164 let 'n>0' && let '--n'
165 conv "-t %`t${t}%`" Subj From
166 prints vs-2s-520s-520 Z "$m" "$Subj" "$From"
167 catv Z =$((n*[20+75+2+520+520+2]+20+75)),,3
168 continue
169 }
170 ;;
171 *) : ;;
172 esac
173 done
174 }
175 ><
176 echo
177 [ -s "$Tmp" ] || return
178 cat "$Tmp" | tr -s ' ' ' ' > "$Tmp"
179 return 0
180 }
181
182
183
184 #{l|h} a b c d-e
185 Loeschen() {
186 [ $# -lt 2 -o Nmax -lt 1 ] && return 20
187 local lz=tHM- t=...... von=000000000 bis=000000000
188 local a:.25
189 expr "$*" :: '^[lh] *[1-9][0-9 -]*$' && t=vb
190 [ "$t" != vb ] && {
191 t=''
192 for a in "$2" "$3"
193 do
194 expr "$a" :: '^[tHM-]%{1,4}$' && t="${t}mt"
195 expr "$a" :bis '^%.%([0-9]%{1,}%)$' && t="${t}sz" von=0
196 expr "$a" :von '^%([0-9]%{1,}%)%.$' && t="${t}sz" bis=100000000
197 expr "$a" :: '^[0-9]%{1,}%.[0-9]%{1,}$' && t="${t}sz" &&
198 expr "$a" :von '^%([0-9]%{1,}%)' &&
199 expr "$a" :bis '%([0-9]%{1,}%)$'
200 done
201 }
202 case "$t" in
203 vb) GetIDs vb $( MkNs $* ) | { nop && pop3 - $IP "$User" "$Pass"; }
204 ;;
205 mt) [ "$1" == l ] && lz="$2"
206 [ "$1" == h ] && expr "$lz" :lz "[$2]" += ''
207 ifset lz || return 0
208 GetIDs mt $1 "$lz" | { nop && pop3 - $IP "$User" "$Pass"; }
209 ;;
210 sz) GetIDs sz $1 $von $bis | { nop && pop3 - $IP "$User" "$Pass"; }
211 ;;
212 mtsz)
213 [ "$1" == l ] && lz="$2"
214 [ "$1" == h ] && expr "$lz" :lz "[$2]" += ''
215 GetIDs ts $1 $von $bis "$lz" | { nop && pop3 - $IP "$User" "$Pass"; }
216 ;;
217 szmt)
218 [ "$1" == l ] && lz="$3"
219 [ "$1" == h ] && expr "$lz" :lz "[$3]" += ''
220 GetIDs ts $1 $von $bis "$lz" | { nop && pop3 - $IP "$User" "$Pass"; }
221 ;;
222 *) return 21 ;;
223 esac
224 Nmax=? Size=? Trans=?
225 return 0
226 }
227
228
229 #{l|h} a b c d-e
230 MkNs() {
231 [ $# -lt 2 ] && return 1
232 local n:010 nm=00000 nmax=$Nmax lh=$1
233 shift
234 let 'nmax>0' || return 1
235 if [ "$lh" == l ]
236 then
237 for n in $*
238 do
239 expr "$n" :: '-' || { echo "$n"; continue; }
240 expr "$n" :n '-' = ' to ' || continue
241 for n from $n repeat
242 do echo "$n"; done
243 done
244 else
245 for nm from 1 to $nmax repeat
246 do
247 for n in $*
248 do
249 expr "$n" :: '-' || { let 'n==nm' && continue 2; continue; }
250 expr "$n" :n '-' = ' to ' || continue
251 for n from $n repeat
252 do
253 let 'n==nm' && continue 3
254 done
255 done
256 echo "$nm"
257 done
258 fi
259 return 0
260 }
261
262
263 # id ...
264 GetIDs() {
265 [ $# -gt 1 ] || { print -u2 narg le 0; return 1; }
266 [ -s "$Tmp" ] || { print -u2 TmpSz eq 0; return 2; }
267 local r=1 t=.. s=000000000 a:.20 id:.70
268 [ $2 == l ] && a="s>=$3 && s<=$4"
269 [ $2 == h ] && a="s<$3 || s>$4"
270 < "$Tmp"
271 case "$1" in
272 vb) shift
273 while read s - id - - -
274 do
275 expr " $* " :: "[ %t]${s}[ %t]" && r=0 catv id /%n
276 done
277 ;;
278 mt) while read - - id t - -
279 do
280 expr "$3" :: "$t" && r=0 catv id /%n
281 done
282 ;;
283 sz) while read - s id - - -
284 do
285 expr "$s" :: '[^0-9]' && continue
286 let "$a" && r=0 catv id /%n
287 done
288 ;;
289 ts) while read - s id t - -
290 do
291 expr "$s" :: '[^0-9]' && continue
292 expr "$5" :: "$t" && let "$a" && r=0 catv id /%n
293 done
294 ;;
295 esac
296 ><
297 return $r
298 }
299
300
301 Show() {
302 [ -s "$Tmp" ] || return 1
303 local n=00000 sz:010 m=-
304 local ls=30 lf=29
305 let 'Cols>80' && let 'lf+=(Cols-80)/2' 'ls+=Cols-80-(lf-29)'
306 < "$Tmp"
307 while read n sz - m Subj From
308 do
309 conv '-t` ' Subj From
310 prints s5bs9bsbs-${ls}bss-${lf} $n $sz $m "$Subj" ' ' "$From"
311 done
312 ><
313 return 0
314 }
315
316
317 # [-a]
318 MainSwitch() {
319 case "$Opt" in
320 i) Holen
321 [ "$1" != '--a' ] && Show ;;
322 I) Holen -s ;;
323 l|h)
324 ifset Arg || return 0
325 [ "$Opt" == l -a "$Arg" == '*' ] && Arg="1-$Nmax"
326 Loeschen $Opt $Arg || echo ERROR$?: Args? Info-Liste?
327 ;;
328 All)
329 read "Arg? Alles Löschen?[jJyY]: "
330 expr "$Arg" :: '^[jJyY]$' || return 0
331 pop3 -A $IP "$User" "$Pass" ;;
332 U) User="$Arg" ;;
333 P) Pass="$Arg" ;;
334 B) Q=0 Body=-b$Arg ;;
335 C) Cols="$Arg"
336 let 'Cols<80' && Cols=80 ;;
337 H) L_ip=$IP
338 ifset Arg || Arg=pop.t-online.de
339 [ "$Arg" == '?' ] && { Hosts '?'; return 0; }
340 expr "$Arg" :: '^[0-9]%{1,2}$' && { Hosts $Arg; Arg="$Host"; }
341 Hostaddr $Arg && Host="$Arg" return 0
342 IP=$L_ip print -u2 "'$Arg'?!"
343 ;;
344 help)
345 print -rn "$Help" ;;
346 q) let "Q^=1" ;;
347 ed)
348 [ `ver s` == dos32 ] && notepad "$Tmp"
349 [ `ver s` == unix ] && vi "$Tmp"
350 read "-? <Enter> "
351 ;;
352 E) return 1;;
353 *) return 0;;
354 esac
355 return 0
356 }
357
358
359
360 L_ip=000000000000000
361 L_ip=$IP
362 Nmax=? Size=? Trans=?
363
364
365 [ "$1" == '-a' ] && {
366 [ $# -lt 3 ] && { remove -s "$Tmp"; exit 0; }
367 Opt=I MainSwitch -a
368 let "Nmax>1&&Size>500000" && Opt=i MainSwitch -a &&
369 let "Nmax>1&&Size>500000" && Opt="$2" Arg="$3 $4" MainSwitch -a
370 remove -s "$Tmp"
371 exit 0
372 }
373
374
375 while prints sf_$Cols
376 echo " $IP $Host $User '$Pass' n=$Nmax b=$Size t=$Trans q=$Q
377 Info-Liste holen : i | I
378 Loeschen : l {n|v-b}... | * | tHM- | {min.max|min.|.max}
379 Halten : h {n|v-b}... | tHM- | {min.max|min.|.max}
380 Beenden : E
381 _%b%c"
382 do
383 read Opt Arg
384 MainSwitch || break
385 done
386
387
388 remove -s "$Tmp"
389 exit 0
390
391
392