diff options
author | Noe Rubinstein <nrubinstein@avencall.com> | 2012-10-02 10:48:15 +0200 |
---|---|---|
committer | Noe Rubinstein <nrubinstein@avencall.com> | 2012-10-02 10:48:15 +0200 |
commit | d6e325c1f591f4334c7ce45f3937e2008e6c81fe (patch) | |
tree | b98ba8fa76af18b4ca893f43bc7d04fe826e0ea1 | |
parent | 537f3e5f072aac0629df1520b723846f5dc41639 (diff) |
convert2: fix two bugs, add an option
-rwxr-xr-x | convert2.rb | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/convert2.rb b/convert2.rb index 94e296f..15d8dcd 100755 --- a/convert2.rb +++ b/convert2.rb @@ -179,6 +179,13 @@ class Reg end end + def cnalyze value, stream=$stdout + stream << @fields.zip(fvs(value)). + reject!{|f,fv| fv == 0 }. + map{|f,fv| "#{fv} << #{@name}_#{f.name}" }. + join(" | ") << "\n" + end + def analyze_one f, fv, longest, longest_name, stream=$stdout tabs = "\t" * [2 - f.name.length / 8, 0].max width = f.start - f.stop + 1 @@ -225,6 +232,7 @@ opts = Trollop::options do banner usage opt :l, "Read log and print a more verbose version" opt :d, "Read memory dump and print a more verbose version" + opt :c, "Produce C code instead of human-readable description" end def load_data f @@ -244,16 +252,16 @@ def reg_from_name data, name, stream=BlackHole stream << " (register #{regname} does not exist!)" return nil else - regname = canonical[regname] = regs.first + regname = $canonical[regname] = regs.first stream << " (interpreted as register #{regname})" end end reg = Reg.from_map(data[regname], regname) end -require 'pp' + def reg_from_number data, str, stream=BlackHole - rega = str.to_i 16 + rega = str.to_i 0 if rega != 0 or str =~ /^(0x)?0+$/ reg = data.select do |k,v| if v["recurring"] @@ -355,7 +363,11 @@ when 3 exit end value = ARGV[2].to_i 0 - reg.analyze(value) + if opts.c + reg.cnalyze(value) + else + reg.analyze(value) + end when 4 data = load_data ARGV[0] reg = reg_from_str(data, ARGV[1], $stdout) |