def self.open(filename, opts = {}, &block)
file = new filename
opts.each do |o, v|
writer = o.to_s + "="
file.__send__(writer, v) if file.respond_to? writer
end
if opts.key?(:wind) or opts.key?(:rewind)
warn ":wind and :rewind options are deprecated, "\
"use :forward and :backward instead!"
end
if backward = opts[:backward] || opts[:rewind]
(args = []) << backward
args << opt[:bufsiz] if opts[:bufsiz]
file.backward(*args)
elsif forward = opts[:forward] || opts[:wind]
file.forward(forward)
end
if opts[:after_reopen]
file.after_reopen(&opts[:after_reopen])
end
if block_given?
begin
block.call file
ensure
file.close
nil
end
else
file
end
end