let do_filter p t rp rt =
let do_output s = if not !_no_blank || s <> "" then pl s in
let do_reject s = if rp s then pe (rt s) in
while true do
let l = read_line () in let pass = p l in if pass then do_output (t l);
match !_opacity with
| OPAQUE -> ()
| RESIDUES -> if not pass then do_reject l
| TRANSPARENT -> do_reject l
done