Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / sound / oss / hex2hex.c
diff --git a/kernel/sound/oss/hex2hex.c b/kernel/sound/oss/hex2hex.c
new file mode 100644 (file)
index 0000000..041ef5c
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+ * hex2hex reads stdin in Intel HEX format and produces an
+ * (unsigned char) array which contains the bytes and writes it
+ * to stdout using C syntax
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#define ABANDON(why) { fprintf(stderr, "%s\n", why); exit(1); }
+#define MAX_SIZE (256*1024)
+unsigned char buf[MAX_SIZE];
+
+static int loadhex(FILE *inf, unsigned char *buf)
+{
+       int l=0, c, i;
+
+       while ((c=getc(inf))!=EOF)
+       {
+               if (c == ':')   /* Sync with beginning of line */
+               {
+                       int n, check;
+                       unsigned char sum;
+                       int addr;
+                       int linetype;
+
+                       if (fscanf(inf, "%02x", &n) != 1)
+                          ABANDON("File format error");
+                       sum = n;
+
+                       if (fscanf(inf, "%04x", &addr) != 1)
+                          ABANDON("File format error");
+                       sum += addr/256;
+                       sum += addr%256;
+
+                       if (fscanf(inf, "%02x", &linetype) != 1)
+                          ABANDON("File format error");
+                       sum += linetype;
+
+                       if (linetype != 0)
+                          continue;
+
+                       for (i=0;i<n;i++)
+                       {
+                               if (fscanf(inf, "%02x", &c) != 1)
+                                  ABANDON("File format error");
+                               if (addr >= MAX_SIZE)
+                                  ABANDON("File too large");
+                               buf[addr++] = c;
+                               if (addr > l)
+                                  l = addr;
+                               sum += c;
+                       }
+
+                       if (fscanf(inf, "%02x", &check) != 1)
+                          ABANDON("File format error");
+
+                       sum = ~sum + 1;
+                       if (check != sum)
+                          ABANDON("Line checksum error");
+               }
+       }
+
+       return l;
+}
+
+int main( int argc, const char * argv [] )
+{
+       const char * varline;
+       int i,l;
+       int id=0;
+
+       if(argv[1] && strcmp(argv[1], "-i")==0)
+       {
+               argv++;
+               argc--;
+               id=1;
+       }
+       if(argv[1]==NULL)
+       {
+               fprintf(stderr,"hex2hex: [-i] filename\n");
+               exit(1);
+       }
+       varline = argv[1];
+       l = loadhex(stdin, buf);
+
+       printf("/*\n *\t Computer generated file. Do not edit.\n */\n");
+        printf("static int %s_len = %d;\n", varline, l);
+       printf("static unsigned char %s[] %s = {\n", varline, id?"__initdata":"");
+
+       for (i=0;i<l;i++)
+       {
+               if (i) printf(",");
+               if (i && !(i % 16)) printf("\n");
+               printf("0x%02x", buf[i]);
+       }
+
+       printf("\n};\n\n");
+       return 0;
+}