#include #include #include "hexdump.h" static unsigned char chk(unsigned char *buf, int len) { int i; unsigned char r = 0; for (i=0; i bufsize) { fprintf(stderr, "hex file too large\n"); ret = -6; goto err; } if (address + offset + data_count > max_address) { max_address = address + offset + data_count; } memcpy(dstbuf + address + offset, databuf + 4, data_count); break; case 0x01: // EOF eof_seen = 1; break; case 0x04: // Extended linear address if (data_count != 2) { fprintf(stderr, "ihex parser: Malformatted 0x04 record at line %d\n", line); ret = -8; goto err; } offset = (databuf[4] << 24) | (databuf[5] << 16); //printf("OFfset: 0x%08x\n", offset); break; case 0x03: // Start segment address case 0x05: // Start linear address // Ignored break; default: case 0x02: // Extended segment address fprintf(stderr, "ihex parser: Unimplemented record type 0x%02x at line %d\n", databuf[3], line); ret = -2; goto err; } } } while (!feof(fptr)); fclose(fptr); return max_address; err: fclose(fptr); return ret; }