2  * hex2hex reads stdin in Intel HEX format and produces an
 
   3  * (unsigned char) array which contains the bytes and writes it
 
   4  * to stdout using C syntax
 
  11 #define ABANDON(why) { fprintf(stderr, "%s\n", why); exit(1); }
 
  12 #define MAX_SIZE (256*1024)
 
  13 unsigned char buf[MAX_SIZE];
 
  15 int loadhex(FILE *inf, unsigned char *buf)
 
  19         while ((c=getc(inf))!=EOF)
 
  21                 if (c == ':')   /* Sync with beginning of line */
 
  28                         if (fscanf(inf, "%02x", &n) != 1)
 
  29                            ABANDON("File format error");
 
  32                         if (fscanf(inf, "%04x", &addr) != 1)
 
  33                            ABANDON("File format error");
 
  37                         if (fscanf(inf, "%02x", &linetype) != 1)
 
  38                            ABANDON("File format error");
 
  46                                 if (fscanf(inf, "%02x", &c) != 1)
 
  47                                    ABANDON("File format error");
 
  49                                    ABANDON("File too large");
 
  56                         if (fscanf(inf, "%02x", &check) != 1)
 
  57                            ABANDON("File format error");
 
  61                            ABANDON("Line checksum error");
 
  68 int main( int argc, const char * argv [] )
 
  74         if(argv[1] && strcmp(argv[1], "-i")==0)
 
  82                 fprintf(stderr,"hex2hex: [-i] filename\n");
 
  86         l = loadhex(stdin, buf);
 
  88         printf("/*\n *\t Computer generated file. Do not edit.\n */\n");
 
  89         printf("static int %s_len = %d;\n", varline, l);
 
  90         printf("static unsigned char %s[] %s = {\n", varline, id?"__initdata":"");
 
  95                 if (i && !(i % 16)) printf("\n");
 
  96                 printf("0x%02x", buf[i]);