/* Quick & (very) Dirty program to extract Data Fork from MacBinary */
#include <stdio.h>
#include <fcntl.h>

main(int argc, char **argv)
{
    int id, od;
    long i;
    char buf[128];

	if ( argc != 2 )
	{
		fprintf(stderr, "Use: %s file.bin\n", argv[0]);
		exit(1);
	}
    if ( -1 != (id = open ( argv[1], O_RDONLY )))
	{

		read(id, buf, 128);
		buf[2+buf[1]]=0x00;

		/* Data Fork length. Avoid byte sex problems */
		i = buf[86] + 256 * ( buf[85] + 256 * ( buf [84] + 256 * buf[83]));

		od = open ( &buf[2], O_WRONLY | O_CREAT, 0666 );

		for ( ; i>0 ; i-=128)
			write( od, buf,  read ( id , buf, i < 128 ? i : 128 ));

		close(od);
		close(id);
	}	
	else
		perror(argv[1]);
}