summaryrefslogtreecommitdiffstats
path: root/sys/i386/isa/sound/hex2hex.h
diff options
context:
space:
mode:
authorjkh <jkh@FreeBSD.org>1995-07-28 21:40:49 +0000
committerjkh <jkh@FreeBSD.org>1995-07-28 21:40:49 +0000
commit19112b8b1d7c4013411f77a8ee48332903ec93ab (patch)
tree81647a2f70826c19344d26635282f97d889294b9 /sys/i386/isa/sound/hex2hex.h
parentccee31df86151913015fb2d5accc4c61a4a5f822 (diff)
downloadFreeBSD-src-19112b8b1d7c4013411f77a8ee48332903ec93ab.zip
FreeBSD-src-19112b8b1d7c4013411f77a8ee48332903ec93ab.tar.gz
Update the sound driver to VOXWARE 3.05 with one GUS patch from
Amancio. There is some SoundSource support here that is primitive and probably doesn't work, but I'll let the two submitters let me know how my integration of that was since I don't have this card to test. I've only tested this on my GUS MAX since it's all I have. This all probably needs to be re-done anyway since we're widely variant from the original VOXWARE source in the current layout. Submitted by: Amancio Hasty and Jim Lowe Obtained from: Hannu Savolainen
Diffstat (limited to 'sys/i386/isa/sound/hex2hex.h')
-rw-r--r--sys/i386/isa/sound/hex2hex.h97
1 files changed, 97 insertions, 0 deletions
diff --git a/sys/i386/isa/sound/hex2hex.h b/sys/i386/isa/sound/hex2hex.h
new file mode 100644
index 0000000..ecd7b4c
--- /dev/null
+++ b/sys/i386/isa/sound/hex2hex.h
@@ -0,0 +1,97 @@
+/*
+ * This file is a part of configure.c
+ *
+ * hex2hex reads an input file in Intel HEX format and produces
+ * an (unsigned char) array which contains the bytes and writes it to the
+ * output file using C syntax
+ */
+
+#define MAX_SIZE (256*1024)
+#define ABANDON(why) { \
+ fprintf(stderr, "%s: " why "\n", source); \
+ fclose(inf);fclose(outf);return 0; \
+ }
+
+int hex2hex(char *source, char *target, char *varline)
+{
+ FILE *inf, *outf;
+
+ int i,l, c;
+ unsigned char buf[MAX_SIZE];
+
+ if ((inf=fopen(source, "r"))==NULL)
+ {
+ perror(source);
+ return 0;
+ }
+
+ if ((outf=fopen(target, "w"))==NULL)
+ {
+ perror(target);
+ fclose(inf);
+ return 0;
+ }
+
+ l=0;
+
+ 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");
+ }
+ }
+
+ fprintf(outf, "/*\n *\t Computer generated file. Do not edit.\n */\n");
+ fprintf(outf, "%s[] = {\n", varline);
+
+ for (i=0;i<l;i++)
+ {
+ if (i) fprintf(outf, ",");
+ if (i && !(i % 16)) fprintf(outf, "\n");
+ fprintf(outf, "0x%02x", buf[i]);
+ }
+
+ fprintf(outf, "\n};\n\n");
+ fclose(inf);
+ fclose(outf);
+ return 1;
+}
OpenPOWER on IntegriCloud