#!/usr/bin/env ruby
#-*-ruby-*-
require "dpklib/command"
require "dpklib/parsearg"
require "dpklib/replacefile"

class FilterReplaceProgram < Dpklib::CommandLineProgram
  def start
    opts = Dpklib.parse_args(argv, "v", "r:") || usage

    verbose = opts[:v]
    opts[:r] && require(opts[:r])
    src = opts.shift || usage
    usage if opts.empty?

    src = stdin.read if (src == '-')
    filter_proc = nil
    case opts[:t]
    when nil, "s"
      filter_proc = eval(<<-EOF)
      proc { |s_in, s_out|
        s_result = begin
                     src = s_in.read
                     #{src}
                   end
        s_out.write(s_result)
      }
      EOF
    else; usage
    end

    while file = opts.shift
      Dpklib.replace_file(file, &filter_proc)
      verbose && info(file)
    end
  end

  def usage
  die(<<-EOF)
usage: #{progname} [-r LIB] [-t TYPE] SCRIPT FILE ...
  -r LIB: Requires LIB before running.
  -t TYPE: choose script type (default: s)
    s: Retrieves input by variable 'src', and write last expression as output.
  -v: Lists processed file.

If SCRIPT is '-', script is loaded from stdin.
  EOF
  end
end #/FilterReplaceProgram
FilterReplaceProgram.exec
