#include <OSIncludes.h>

#pragma header

#include <stdio.h>

#define ARG_TEMPLATE "TO/A"

enum {ARG_TO,NUM_ARGS};

static struct RDArgs *MyArgs;
static BPTR MyHandle;
static LONG Args[NUM_ARGS];

static char s[256];

static char *VERSTRING = "$VER: SaveROM 0.5 ("__DATE2__")";
static char *AUTHSTRING = "$AUTH: Georg Steger";

void Cleanup(char *mes)
{
	WORD rc;
	
	if (mes)
	{
		rc=RETURN_WARN;
		printf("SaveROM: %s\n",mes);
	} else {
		rc=RETURN_OK;
	}
	
	if (MyHandle) Close(MyHandle);
	if (MyArgs) FreeArgs(MyArgs);

	exit(rc);
}

static void GetArguments(void)
{
	if (!(MyArgs=ReadArgs(ARG_TEMPLATE,Args,0)))
	{
		Fault(IoErr(),0,s,255);
		Cleanup(s);
	}	
}

static void SaveROM(void)
{
	LONG ROMSize;
	APTR ROM;
	
	if (!(MyHandle=Open((char *)Args[ARG_TO],MODE_NEWFILE)))
	{
		Fault(IoErr(),0,s,255);
		Cleanup(s);
	}
	
	ROMSize = *(LONG *)(0x1000000 - 0x14);
	
	ROM = (APTR)(0x1000000 - ROMSize);
	
	if (Write(MyHandle,ROM,ROMSize) != ROMSize)
	{
		Fault(IoErr(),0,s,255);
		Cleanup(s);
	}
}

void main(void)
{
	GetArguments();
	SaveROM();
	Cleanup(0);
}
