summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNoe Rubinstein <nrubinstein@avencall.com>2012-10-02 10:48:15 +0200
committerNoe Rubinstein <nrubinstein@avencall.com>2012-10-02 10:48:15 +0200
commitd6e325c1f591f4334c7ce45f3937e2008e6c81fe (patch)
treeb98ba8fa76af18b4ca893f43bc7d04fe826e0ea1
parent537f3e5f072aac0629df1520b723846f5dc41639 (diff)
convert2: fix two bugs, add an option
-rwxr-xr-xconvert2.rb20
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)