--- genaif.c.orig	2002-12-29 16:44:45.000000000 +0200
+++ genaif.c	2007-07-30 20:15:00.000000000 +0300
@@ -13,8 +13,28 @@
 
 /* NOTE: we have to write intel byte oder. Fix this if not on native */
 
-#define PUTLONG(X) fwrite(&X, sizeof(long), 1, fpout)
-#define GETLONG(X) fread(&X, sizeof(long), 1, fpin)
+#define PUTLONG(X) PutLong(&X, fpout)
+#define GETLONG(X) GetLong(&X, fpin)
+
+void GetLong(long* ret_val, FILE *fp)
+{
+      long val;
+      val =  (long) (fgetc(fp) & 0xFF);
+      val |= ((long) (fgetc(fp) & 0xFF) << 0x08);
+      val |= ((long) (fgetc(fp) & 0xFF) << 0x10);
+      val |= ((long) (fgetc(fp) & 0xFF) << 0x18);
+      *ret_val = val;
+}
+
+void PutLong(long* val, FILE *fp)
+{
+      fputc(*val & 0xFF, fp);
+      fputc((*val >> 0x08) & 0xFF, fp);
+      fputc((*val >> 0x10) & 0xFF, fp);
+      fputc((*val >> 0x18) & 0xFF, fp);
+}
+
+
 
 static char *Usage =
 	"Usage: genaif [-u] UID3 aifspecfile app.aif\n"
@@ -85,15 +105,13 @@
 uidcsum(unsigned long u[3])
 {
   unsigned int i, crc1 = 0, crc2 = 0;
-  unsigned char *c;
   
   for(i = 0; i < 3; i++)
     {
-      c = (unsigned char *)&u[i];
-      crc1 = docrc16_1(crc1, c[0]);
-      crc2 = docrc16_1(crc2, c[1]);
-      crc1 = docrc16_1(crc1, c[2]);
-      crc2 = docrc16_1(crc2, c[3]);
+      crc1 = docrc16_1(crc1, (u[i] >>  0) & 0xff);
+      crc2 = docrc16_1(crc2, (u[i] >>  8) & 0xff);
+      crc1 = docrc16_1(crc1, (u[i] >> 16) & 0xff);
+      crc2 = docrc16_1(crc2, (u[i] >> 24) & 0xff);
     }
   return (crc2 << 16) | crc1;
 }
@@ -313,8 +331,9 @@
   PUTLONG(l[2]);
   PUTLONG(id);
   count++;
-  while(GETLONG(id) == 1)
+  while(!feof(fpin))
     {
+      GETLONG(id);
       if(id == oldid)
         count++, id = l[2];
       PUTLONG(id);
