#!/usr/bin/python
#
# simply binary dump
#
import sys
import array
if len(sys.argv) < 4:
print "bindump.py file offset count"
sys.exit(1)
else:
try:
_fname = file(sys.argv[1])
except:
print "invalid file: " + sys.argv[1]
sys.exit(1)
try:
_offset = int(sys.argv[2])
except:
print "invalid offset: " + sys.argv[2]
sys.exit(1)
if _offset < 0:
print "invalid offset: %d" % _offset
sys.exit(1)
try:
_count = int(sys.argv[3])
except:
print "invalid byte count: " + sys.argv[3]
sys.exit(1)
if _count < 0:
print "invalid byte count: %d" % _count
sys.exit(1)
print "opening file: " + _fname.name
print "offset: %d" % _offset
print "count: %d" % _count
try:
_fname.seek(_offset, 0)
except:
_fname.close()
print "invalid offset into file: %d" % _offset
sys.exit(1)
_data = array.array('B')
try:
_data.fromfile(_fname, _count)
except:
_fname.close()
print "invalid read of %d bytes from file: %s" % (_count, _fname.name)
sys.exit(1)
_fname.close()
_patterns = [
'0 0 0 0', # 0
'0 0 0 1', # 1
'0 0 1 0', # 2
'0 0 1 1', # 3
'0 1 0 0', # 4
'0 1 0 1', # 5
'0 1 1 0', # 6
'0 1 1 1', # 7
'1 0 0 0', # 8
'1 0 0 1', # 9
'1 0 1 0', # A
'1 0 1 1', # B
'1 1 0 0', # C
'1 1 0 1', # D
'1 1 1 0', # E
'1 1 1 1' # F
]
_i = 0
while (_i < _count):
_bitoffset = _i * 8
_nib1 = _patterns[((_data[_i] & 0xf0) >> 4)]
_nib2 = _patterns[(_data[_i] & 0x0f)]
print "%d [%d]: 0x%02x %s %s" % (_i, _bitoffset, _data[_i], _nib1, _nib2)
_i = _i + 1