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