#include #include #include #include #include #if !defined(__linux__) typedef char int8_t; typedef short int16_t; typedef long int32_t; #endif typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; #define ERR_FORMAT(n) (-(n)) int ln; int bit_load(FILE *fp, uint8_t *buf, int bufsiz) { uint8_t *p, wk; int c,x,i; int len; int total = 0; p = buf; memset(buf, 0, bufsiz); for (i=0; i<13; i++) fgetc(fp); for (;;) { ln ++; c = fgetc(fp); if (c == EOF) break; if (c < 'a' || 'e' < c) { printf("# ln %d c = %02x\n", ln, c); return ERR_FORMAT(1); } if (fread (&wk, 1, 1, fp) != 1) return ERR_FORMAT(2); len = (int)wk << 8; if (fread (&wk, 1, 1, fp) != 1) return ERR_FORMAT(3); len += wk; if (c == 'e') { len <<= 16; if (fread (&wk, 1, 1, fp) != 1) return ERR_FORMAT(4); len += (int)wk << 8; if (fread (&wk, 1, 1, fp) != 1) return ERR_FORMAT(5); len += wk; printf("# ln %d c = %02x len = %d\n", ln, c, len); x = fread (p, 1, len, fp); if( x != len) { printf("total = %d len = %d x = %d \n", total, len, x); return ERR_FORMAT(6); } *p += len; total += len; } else { printf("# ln %d c = %02x len = %d\n", ln, c, len); for (i=0; i< len; i++) { x = fgetc(fp); if (x == EOF) return ERR_FORMAT(5); } } if (total > bufsiz) return ERR_FORMAT(6); } return total; } uint8_t rev[256]; void build_rev() { int i,v,j; for (i=0; i< 256; i++) { v = 0; for (j = 0; j < 8; j++) { if (i & (1<> j); } rev[i] = v; } } void dump(uint8_t *buf, int addr, int len, int rev_bit) { int i,n; int match = 0; printf("*** dump ***\n"); addr &= ~0xf; len = (len + 15) >> 4; for (n=0; n0)? r : 256, 0); }