Example #1
0
        print >> sys.stderr, str(e)
        print >> sys.stderr, USAGE
        return 1

    # TODO: move actual merge code into intelhex package as helper function
    #       and write couple of tests for it.
    res = intelhex.IntelHex()

    def end_addr_inclusive(addr):
        if addr is not None:
            return addr + 1
        return addr

    for f in args:
        try:
            fname, fstart, fend = intelhex._get_file_and_addr_range(f)
        except intelhex._BadFileNotation:
            print >> sys.stderr, 'Bad argument: "%s"' % f
            print >> sys.stderr, USAGE
            return 1
        if fname == '-':
            fname = sys.stdin
        ih = intelhex.IntelHex(fname)
        if (fstart, fend) != (None, None):
            ih = ih[fstart:end_addr_inclusive(fend)]
        try:
            res.merge(ih, overlap)
        except intelhex.AddressOverlapError, e:
            print >> sys.stderr, 'Merging:', fname
            print >> sys.stderr, str(e)
            return 1
Example #2
0
        sys.stderr.write(str(e)+"\n")
        sys.stderr.write(USAGE+"\n")
        return 1

    # TODO: move actual merge code into intelhex package as helper function
    #       and write couple of tests for it.
    res = intelhex.IntelHex()

    def end_addr_inclusive(addr):
        if addr is not None:
            return addr + 1
        return addr

    for f in args:
        try:
            fname, fstart, fend = intelhex._get_file_and_addr_range(f)
        except intelhex._BadFileNotation:
            sys.stderr.write('Bad argument: "%s"\n' % f)
            sys.stderr.write(USAGE+"\n")
            return 1
        if fname == '-':
            fname = sys.stdin
        ih = intelhex.IntelHex(fname)
        if (fstart, fend) != (None, None):
            ih = ih[fstart:end_addr_inclusive(fend)]
        try:
            res.merge(ih, overlap)
        except intelhex.AddressOverlapError, e:
            sys.stderr.write('Merging: '+fname+"\n")
            sys.stderr.write(str(e)+"\n")
            return 1
Example #3
0
def main(args=None):
    import getopt

    output = None
    start = None
    end = None
    write_start_addr = True
    overlap = 'error'

    if args is None:
        args = sys.argv[1:]
    try:
        opts, args = getopt.gnu_getopt(args, 'hvo:r:', [
            'help',
            'version',
            'output=',
            'range=',
            'no-start-addr',
            'overlap=',
        ])

        for o, a in opts:
            if o in ('-h', '--help'):
                print(USAGE)
                return 0
            elif o in ('-v', '--version'):
                print(VERSION)
                return 0
            elif o in ('-o', '--output'):
                output = a
            elif o in ("-r", "--range"):
                try:
                    l = a.split(":")
                    if l[0] != '':
                        start = int(l[0], 16)
                    if l[1] != '':
                        end = int(l[1], 16)
                except (ValueError, IndexError):
                    raise getopt.GetoptError('Bad range value(s)')
            elif o == '--no-start-addr':
                write_start_addr = False
            elif o == '--overlap':
                if a in ('error', 'ignore', 'replace'):
                    overlap = a
                else:
                    raise getopt.GetoptError('Bad overlap value')

        if len(args) == 0:
            raise getopt.GetoptError('You should specify file list')

    except getopt.GetoptError:
        e = sys.exc_info()[1]  # current exception
        sys.stderr.write(str(e) + "\n")
        sys.stderr.write(USAGE + "\n")
        return 1

    import intelhex
    # TODO: move actual merge code into intelhex package as helper function
    #       and write couple of tests for it.
    res = intelhex.IntelHex()

    def end_addr_inclusive(addr):
        if addr is not None:
            return addr + 1
        return addr

    for f in args:
        try:
            fname, fstart, fend = intelhex._get_file_and_addr_range(f)
        except intelhex._BadFileNotation:
            sys.stderr.write('Bad argument: "%s"\n' % f)
            sys.stderr.write(USAGE + "\n")
            return 1
        if fname == '-':
            fname = sys.stdin
        ih = intelhex.IntelHex(fname)
        if (fstart, fend) != (None, None):
            ih = ih[fstart:end_addr_inclusive(fend)]
        try:
            res.merge(ih, overlap)
        except intelhex.AddressOverlapError:
            e = sys.exc_info()[1]  # current exception
            sys.stderr.write('Merging: ' + fname + "\n")
            sys.stderr.write(str(e) + "\n")
            return 1

    if (start, end) != (None, None):
        res = res[start:end_addr_inclusive(end)]
    if output is None:
        output = sys.stdout
    res.write_hex_file(output, write_start_addr)
    return 0
Example #4
0
def main(args=None):
    import getopt

    output = None
    start = None
    end = None
    write_start_addr = True
    overlap = 'error'

    if args is None:
        args = sys.argv[1:]
    try:
        opts, args = getopt.gnu_getopt(args, 'hvo:r:',
                                       ['help', 'version',
                                        'output=', 'range=',
                                        'no-start-addr', 'overlap=',
                                       ])

        for o,a in opts:
            if o in ('-h', '--help'):
                print(USAGE)
                return 0
            elif o in ('-v', '--version'):
                print(VERSION)
                return 0
            elif o in ('-o', '--output'):
                output = a
            elif o in ("-r", "--range"):
                try:
                    l = a.split(":")
                    if l[0] != '':
                        start = int(l[0], 16)
                    if l[1] != '':
                        end = int(l[1], 16)
                except (ValueError, IndexError):
                    raise getopt.GetoptError('Bad range value(s)')
            elif o == '--no-start-addr':
                write_start_addr = False
            elif o == '--overlap':
                if a in ('error', 'ignore', 'replace'):
                    overlap = a
                else:
                    raise getopt.GetoptError('Bad overlap value')

        if len(args) == 0:
            raise getopt.GetoptError('You should specify file list')

    except getopt.GetoptError:
        e = sys.exc_info()[1]     # current exception
        sys.stderr.write(str(e)+"\n")
        sys.stderr.write(USAGE+"\n")
        return 1

    import intelhex
    # TODO: move actual merge code into intelhex package as helper function
    #       and write couple of tests for it.
    res = intelhex.IntelHex()

    def end_addr_inclusive(addr):
        if addr is not None:
            return addr + 1
        return addr

    for f in args:
        try:
            fname, fstart, fend = intelhex._get_file_and_addr_range(f)
        except intelhex._BadFileNotation:
            sys.stderr.write('Bad argument: "%s"\n' % f)
            sys.stderr.write(USAGE+"\n")
            return 1
        if fname == '-':
            fname = sys.stdin
        ih = intelhex.IntelHex(fname)
        if (fstart, fend) != (None, None):
            ih = ih[fstart:end_addr_inclusive(fend)]
        try:
            res.merge(ih, overlap)
        except intelhex.AddressOverlapError:
            e = sys.exc_info()[1]     # current exception
            sys.stderr.write('Merging: '+fname+"\n")
            sys.stderr.write(str(e)+"\n")
            return 1

    if (start, end) != (None, None):
        res = res[start:end_addr_inclusive(end)]
    if output is None:
        output = sys.stdout
    res.write_hex_file(output, write_start_addr)
    return 0