すいません、コピペをミスしました。
writeUlong関数とwriteUShort関数をどなたか作ってください。

unsigned char *readBytes(FILE *f, int n)
{
static unsigned char s[16];

if (fread(s, n, 1, f) != 1) {
exit(1);
}
return s;
}

unsigned long readUlong(FILE *f)
{
unsigned char *s = readBytes(f, 4);
return s[0] + 256LU * (s[1] + 256LU * (s[2] + 256LU * s[3]));
}

unsigned readUshort(FILE *f)
{
unsigned char *s = readBytes(f, 2);
return s[0] + 256U * s[1];
}