xtm-utils/bin/xtmjoin
2010-11-15 21:47:31 +01:00

107 lines
2.1 KiB
Ruby
Executable file

#!/usr/bin/ruby
require 'optparse'
require 'rubygems'
require 'bindata'
require 'xtmfile/header'
require 'xtmfile/joiner'
require 'xtmfile/splitter'
class XtmJoin
class XtmJoinArgumentError < ArgumentError ; end
attr_reader :opts
BUFFER_MAX_SIZE = 4096 * 4096
def initialize args
@args = []
@input_filename = nil
parse_command_line args
end
def parse_command_line args
@args = args.clone
@opts = OptionParser.new do |opts|
opts.banner = "Usage: #{File.basename $0} [options]\n"
opts.separator ""
opts.separator "Options"
opts.on("-i", "--input FILE", "Input XTM file (mandatory)") do |r|
@input_filename = r
end
opts.on("-o", "--output FILE", "Output file (optional)") do |o|
@output_filename = o
end
opts.on("-m", "--md5", "Verify MD5 sums") do |m|
@verify_md5 = m
end
opts.on("-h", "--help", "Show this help") do |h|
@help = h
end
opts.on("-v", "--verbose", "Show warnings too") do |v|
@verbose = v
end
opts.separator ""
end
end
def validate!
@opts.parse!
raise XtmJoinArgumentError, "No input XTM file specified!" if @input_filename.nil?
raise RuntimeError, "Current input XTM does not exist!" unless File.exist? @input_filename
raise RuntimeError, "Current input XTML is not a file!" unless File.file? @input_filename
@input_filename = File.expand_path @input_filename
end
def run
validate!
# FIXME: prevent overwriting
xtmj = XtmFile::Joiner.new @input_filename, @output_filename
puts "Writing data to %s" % xtmj.output_filename
xtmj.start do |event, info|
case event
when XtmFile::Joiner::EVENT_OPENFILE then
puts "Opening %s" % info
when XtmFile::Joiner::EVENT_PROGRESS then
print "\x1b[uProgress : %s %" % info
STDOUT.flush
end
end
STDOUT.puts ""
end
def self.main args
xj = nil
begin
xj = XtmJoin.new args
xj.run
exit 0
rescue XtmJoinArgumentError => e
STDERR.puts "%s" % xj.opts
STDERR.puts "error: %s" % e.message
exit 1
rescue SystemExit => e
raise e
rescue Exception => e
STDERR.puts "error: %s" % e.message
exit 1
end
end
end
XtmJoin.main ARGV