#include	<stdio.h>
#include	<string.h>
#include	<stdlib.h>
#include	"picture.h"

#include	"gb.h"

#include	"gfxfunc.h"
#include	"options.h"
#include	"main.h"
#include	"readvars.h"
#include	"prefs.h"
#include	"keycodes.h"
#include	"system.h"

extern	char	*SaveName;

int 	GBMain(int argc,char *argv[]);
int		PlayCart(char *name);
int		LoadSnapshot(char *name);

int		GameOption=0;	
char	GameToLoad[256]="aa.GB";

int GBMain(int argc,char *argv[])
{
	//	Set default emulator variables
//	TrapBadOps=1;
	LineDelay=1;CheckCRC=1; 
	VPeriod=10000;UPeriod=2;IntSync=1;
	Verbose=0;

	//	Initialize everything
	GXInitiateHardware();
	LoadPrefs();
	SetMethod(method);
	SetupGFX();
	InitMachine();

	//	Get cart name
	if(argc>=2){
		strcpy(GameToLoad, argv[1]);
	}else{
		if(!FileRequestor(GameToLoad,TitleStrings[0])){
			GXQuitCode("game loading canceled\n");
		}
	}

	//	cart selection & play loop
	do{
		GameOption=GAMEOPTION_LOAD;
		MakeGameScreen();
		if(!LoadSnapshot(GameToLoad)){
			if(!PlayCart(GameToLoad)){
				ErrorMessage(ErrorString[0]);
				if(!FileRequestor(GameToLoad,TitleStrings[0]))break;
			}
		}
		if(GameOption==GAMEOPTION_QUIT)break;
	}while(1);
	GXQuitCode(0);
	return	1;
}

int	PlayCart(char *name)
{
	char	*to,*from,letter;
	char	*SavePage;
	int		ret,len;

	//	Make up save name
	to=SavePage=(char *)GXGetMem(256*sizeof(char), MEMF_ABORT);	
	from=name;
	while(letter=*from++){
		if(	(letter>='a')&&(letter<='z')){
			letter+=('A'-'a');
		}
		*to++=letter;
	}
	*to=0;
	len=strlen(SavePage);
	if(len>=3){
		from=SavePage+len-3;
		if(!strcmp(from,".GB")){
			strcpy(from,".SAV");
		}else{
			strcpy(SavePage+len,".SAV");
		}
	}else{
		strcpy(SavePage+len,".SAV");
	}
	SaveName=SavePage;
	GXPrintf("SaveName:%s\n",SaveName);

	//	Play the cart
	ret=StartGB(name);

	//	Free up everything and quit
	if(!ret){
		GXPrintf("Failed to load cart\n");
		if(SavePage)GXFreeMem(SavePage);
		SaveName=NULL;
		return 0;
	}else{
		GXPrintf("Game boy ending normally\n");
		TrashGB();		
		if(SavePage)GXFreeMem(SavePage);
		SaveName=NULL;
		return 1;
	}
}
