Mercurial > lcfOS
diff python/hexutil.py @ 244:58155c7c4a8e
Add hexutil
author | Windel Bouwman |
---|---|
date | Wed, 24 Jul 2013 19:47:13 +0200 |
parents | |
children | f254b87258e6 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python/hexutil.py Wed Jul 24 19:47:13 2013 +0200 @@ -0,0 +1,53 @@ +#!/usr/bin/python + +import sys +import argparse +from hexfile import HexFile + +def hex2int(s): + if s.startswith('0x'): + s = s[2:] + return int(s, 16) + raise ValueError('Hexadecimal value must begin with 0x') + +parser = argparse.ArgumentParser( + description='hexfile manipulation tool by Windel Bouwman') +subparsers = parser.add_subparsers(title='commands', + description='possible commands', dest='command') + +p = subparsers.add_parser('info', help='dump info about hexfile') +p.add_argument('hexfile', type=argparse.FileType('r')) + +p = subparsers.add_parser('new', help='create empty hexfile') +p.add_argument('hexfile', type=argparse.FileType('x')) + +p = subparsers.add_parser('add', help='add binary data from file to hexfile') +p.add_argument('hexfile', type=argparse.FileType('r+'), help="the hexfile to add the data to") +p.add_argument('address', type=hex2int, help="hex address") +p.add_argument('datafile', type=argparse.FileType('rb'), help='binary file to add') + +def main(args): + if args.command == 'info': + hf = HexFile() + hf.load(args.hexfile) + print(hf) + for region in hf.regions: + print(region) + elif args.command == 'new': + hf = HexFile() + hf.save(args.hexfile) + elif args.command == 'add': + hf = HexFile() + hf.load(args.hexfile) + data = args.datafile.read() + hf.addRegion(args.address, data) + else: + raise NotImplementedError() + +if __name__ == '__main__': + args = parser.parse_args() + if not args.command: + parser.print_usage() + sys.exit(1) + main(args) +