8d3a9242e3
* require commands are in the right place now. * Moved XtmFile-related classes to a separate namespace. * Distinction between summary & full header.
82 lines
1.4 KiB
Ruby
Executable file
82 lines
1.4 KiB
Ruby
Executable file
#!/usr/bin/env ruby
|
|
|
|
require 'optparse'
|
|
require 'xtmfile/header'
|
|
|
|
module XtmFile
|
|
class XtmInfo
|
|
class XtmInfoArgumentError < ArgumentError ; end
|
|
|
|
attr_reader :opts
|
|
|
|
|
|
def initialize args
|
|
@args = []
|
|
@input_xtm = 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 "Mandatory options"
|
|
|
|
opts.on("-i", "--input FILE", "Input XTM file") do |r|
|
|
@input_xtm = r
|
|
end
|
|
|
|
opts.separator ""
|
|
opts.separator "General options:"
|
|
|
|
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 XtmInfoArgumentError, "No input XTM file specified!" if @input_xtm.nil?
|
|
end
|
|
|
|
|
|
def run
|
|
validate!
|
|
|
|
File.open( @input_xtm, "rb" ) do |io|
|
|
header = Header::read io
|
|
puts header.to_summary_string
|
|
end
|
|
end
|
|
|
|
def self.main args
|
|
xj = nil
|
|
begin
|
|
xj = XtmInfo.new args
|
|
xj.run
|
|
exit 0
|
|
rescue XtmInfoArgumentError => 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
|
|
STDERR.puts e.backtrace
|
|
exit 1
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
XtmFile::XtmInfo.main ARGV
|