/********************************************* FileMenu *************************************************/
struct FileMenu	:	public PMenu
{
	FileMenu();
	
	virtual	void	menuPrepare() {}
	virtual	void	handleMenuSelection(unsigned short item);
};

/********************************************* MyApplication *************************************************/
struct MyApplication	:	public PApplication
{
	FileMenu				fileMenu;
};

/********************************************* The application *************************************************/
MyApplication*		theApp = nil;
char*			readOnlyMem = "Hey stupid!";

/********************************************* The program *************************************************/
#include <Private Native Exceptions.h>

typedef void (*aProcPtr)(void);

void main(void)
{
	try
	{
		(*(aProcPtr)1)();
		long x = *(long*)0x64387410;
		readOnlyMem[0] = 1;
		theApp = new MyApplication;
		theApp->run();
	}
	catch(PErr err)
	{
		dout << "Error " << err << " was thrown and caught in main()!\n";
	}
	catch(...)
	{
		dout << "Some really weird error was caught in main() - it wasn't even a PErr!\n";
	}
	
	delete theApp;
}

/********************************************* FileMenu methods *************************************************/
FileMenu::FileMenu():
	PMenu("File")
{
	addMenuItem("Quit",'Q');
}

void FileMenu::handleMenuSelection(unsigned short item)
{
	if(item == 1)
		theApp->quit();
}

static void stupid(void)
{
	try
	{
		throw 1L;
	}
	catch(...)
	{
	}
}
