X-Git-Url: https://git.ozlabs.org/?p=bitfield;a=blobdiff_plain;f=bitfield;h=32a0405648b0d4dade7caff3b4a1421facf704e5;hp=73f41ff7b5cb2e2d56afaae87961863228f7b3e7;hb=dca1f318721180d56499053325f88f9db1140b0a;hpb=8531bf112c7ed04c18ef2fe13e9f2b5e9265e641 diff --git a/bitfield b/bitfield index 73f41ff..32a0405 100644 --- a/bitfield +++ b/bitfield @@ -71,7 +71,8 @@ class bitfield: return a class register: - def __init__(self, name, width): + def __init__(self, id, name, width): + self.id = id self.name = name self.width = width self.fields = [] @@ -158,7 +159,7 @@ def parse_config(bnf, regs, file): raise ConfigurationError(file, "Register %s has no fields" % id) - r = register(name, width) + r = register(id, name, width) for f in fields: r.add_field(f) @@ -208,7 +209,22 @@ def parse_all_configs(configs): return regs def usage(prog): - print "Usage: %s <-l> | <-s pattern> | register [value...]" % prog + print "Usage: %s <-l> | <-s pattern> | [-n] register [value...]" % prog + +def decode_value(reg, value, options): + try: + i = long(value, 0) + except ValueError, e: + print "error: invalid value '%s'" % value + return + + if i > ((1 << reg.width) - 1): + print ("error: value '%s' is too large " + \ + "for %d-bit register '%s'") % (value, reg.width, reg.id) + return + + print reg.decode(i, options.has_key('non_zero')) + def main(): try: @@ -269,8 +285,7 @@ def main(): return for value in values: - i = long(value.strip(), 0) - print r.decode(i, options['non-zero']) + decode_value(r, value.strip(), options) return 0